Customization
Learn how to customize our SDK and make it look like your app.
Custom layout creation
To create a new layout we recommend that you use the default templates from the SDKs and make the desired changes.
Don't forget to have DataBinding enabled in your project as instructed in the Getting started section.
Step-by-step
Declare the dependency on
CameraView
in your app-level gradle file.
// CameraX core library using the camera2 implementation
implementation "androidx.camera:camera-view:1.2.1"
2. Create a layout file in your project's layout directory using the CAF template.
3. Refer to the corresponding ViewModel
for each SDK in your layout file. Example:
<layout>
<data>
<import type="android.view.View"/>
<variable
name="viewModel"
type="com.combateafraude.documentdetector.controller.viewmodel.SDKViewModel" />
</data>
...
</layout>
4. Create your views, and parameterize the visibility and call methods of the ViewModel of each corresponding SDK according to the following tables. Example:
<layout>
...
<androidx.camera.view.PreviewView
android:id="@id/cameraImageView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:visibility="@{viewModel.cameraVisibility ? View.VISIBLE : View.GONE}"
/>
...
</layout>
Variables and methods used in layout
All the methods and variables described below are accessed from the SDKViewModel class.
Methods
Method | Description | Return | SDK |
---|---|---|---|
| Responsible for initiating image capture in MANUAL mode | Void | DocumentDetector, PassiveFaceLiveness |
| Responsible for closing the SDK. | Void | DocumentDetector, PassiveFaceLiveness, FaceAuthenticator |
| Responsible for reversing the camera. | Void | DocumentDetector |
State variables
The Layout used in the SDK is composed of several state variables, these variables are responsible for identifying the state that the SDK is in at each moment of its execution:
Variable | Description | Type | SDK |
---|---|---|---|
| Indicates the 'loading' state | Boolean | DocumentDetector, PassiveFaceLiveness, FaceAuthenticator |
| Indicates that the SDK is ready to capture, after performing all validations for sensors, framing, face, etc. | Boolean | DocumentDetector, PassiveFaceLiveness, FaceAuthenticator |
| Indicates that the capture step ended successfully | Boolean | DocumentDetector, PassiveFaceLiveness, FaceAuthenticator |
| Indicates if there are any faulty sensor checks, quality, framing, face distance, etc. | Boolean | DocumentDetector, PassiveFaceLiveness, FaceAuthenticator |
| Indicates what type of error has occurred. See the table below | ValidationFailure | DocumentDetector, PassiveFaceLiveness, FaceAuthenticator |
| Indicates the capture mode enabled. May vary between AUTOMATIC and MANUAL | CaptureMode | DocumentDetector, PassiveFaceLiveness |
| Indicates the status of the mask. Can range from NORMAL, SUCCESS to ERROR | Mask | DocumentDetector |
| Responsible for returning the Drawable Resource Id used to define the mask. | Integer | DocumentDetector |
| Name of the previous step that was performed. If not, the value will be null. Example: Back of ID. | String | DocumentDetector |
Visibility variables
Variable | Description | Type | SDK |
---|---|---|---|
| Indicates the visibility of the step initialization popup | Boolean | DocumentDetector |
| Indicates visibility of the manual capture button | Boolean | DocumentDetector, PassiveFaceLiveness |
| Indicates the visibility of the reverse camera button | Boolean | DocumentDetector |
| Responsible for the visibility of the SDK status message. | Boolean | DocumentDetector |
| Returns the status message. Customize with MessageSettings | String | DocumentDetector |
| Returns the status message. Customize with MessageSettings | String | DocumentDetector |
| Responsible for camera visibility. | Boolean | DocumentDetector, PassiveFaceLiveness, FaceAuthenticator |
| Indicates mask visibility. | Boolean | DocumentDetector |
| Responsible for the visibility of the camera flip button. This variable has been deprecated, we recommend using the switchCameraButtonVisibility variable. | Boolean | DocumentDetector |
| Responsible for the visibility of the loading displayed by the SDK. This variable has been deprecated, we recommend using the loadingStatus variable. | Boolean | DocumentDetector |
| Sets the visibility of the manual capture button. This variable has been deprecated, use manualCaptureButtonVisibility. | Boolean | DocumentDetector |
ValidationFailure
Each SDK contains a number of validation errors that can occur while running. These mostly generate the "error mask" state and prevent the capture from being performed:
Error | Description | SDK |
---|---|---|
| Brightness sensor. The environment is too dark | DocumentDetector, PassiveFaceLiveness |
| Orientation sensor. Device not in correct position | DocumentDetector, PassiveFaceLiveness |
| Stability sensor. The device is in motion | DocumentDetector, PassiveFaceLiveness, FaceAuthenticator |
| Document or face-framing | DocumentDetector, PassiveFaceLiveness, FaceAuthenticator |
| A face with closed eyes was identified | PassiveFaceLiveness, FaceAuthenticator |
| No face was found | PassiveFaceLiveness, FaceAuthenticator |
| Face too far away. | PassiveFaceLiveness, FaceAuthenticator |
| Very close face. | PassiveFaceLiveness, FaceAuthenticator |
| Incorrect face angle on the X axis. | PassiveFaceLiveness |
| Incorrect face angle on the Y axis. | PassiveFaceLiveness |
| Incorrect face angle on the Z axis. | PassiveFaceLiveness |
| Multiple faces detected. | PassiveFaceLiveness, FaceAuthenticator |
| Quality of the document capture is too low. | DocumentDetector |
| Error in the proof of life. It is a probable fraud attempt | PassiveFaceLiveness, FaceAuthenticator |
| Document type or document side was not expected. | DocumentDetector |
| Passaport country code (or issuing code) is not allowed. | DocumentDetector |
Using layout in Builder
After creating the desired files, create an object of type DocumentDetector. This object is for you to configure all your business rules for the SDK, including the interface customization attributes:
DocumentDetector mDocumentDetector = new DocumentDetector.Builder(String mobileToken)
// see table below
.build();
Builder method
Parameter | Required | Compatibility |
---|---|---|
Replaces the SDK's default layout. Create a file in your project's layout folder, copy the standard layout template corresponding to the SDK you are integrating and make the desired changes. | No. Here is the default for each SDK. | Latest versions |
Replaces the SDK's default style. In your project's styles.xml file, copy the default template and edit it. | No. Here is the default for each SDK. | Latest versions |
Replaces the masks for capturing a document or face: SUCCESS, NORMAL, and FAIL, in that order. If you use this option, use masks with the same detection area of the document and face, as this region is very important for the algorithm to capture. | No. Here is the default for each SDK. | DocumentDetector |
Defines which group of masks predefined in the product will be used by the SDK:
| No. The default masks are used. | DocumentDetector |
Using the methods
DocumentDetector mDocumentDetector = new DocumentDetector.Builder(String mobileToken)
.setLayout(R.layout.customLayout)
.setStyle(R.style.customStyle)
.setMask(MaskType.DETAILED)
.build();
Different uses .setMask() method
DocumentDetector mDocumentDetector = new DocumentDetector.Builder(String mobileToken)
// Using Customized Masks
.setMask(R.drawable.customGreenMask, R.drawable.customWhiteMask, R.drawable.customRedMask)
// Using masks already offered by the SDK
.setMask(MaskType.DETAILED)
.build();
Custom style creation
To create a new style, we recommend that you use the same template that we use, this way it will be easier to perform customizations.
Customization of masks
To customize the masks, first create a drawable resource in your project. You can customize whiteMask, greenMask, and redMask in any way you like. We have provided generic document and face masks that you can use for reference. See the setMask
method definition and examples in DocumentDetector.Builder. And see also examples of custom mask integration.
Default templates
Activity (setLayout
)
<?xml version="1.0" encoding="utf-8"?>
<layout>
<data>
<import type="android.view.View"/>
<variable
name="viewModel"
type="com.combateafraude.documentdetector.controller.viewmodel.SDKViewModel" />
</data>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_height="match_parent"
android:layout_width="match_parent"
android:keepScreenOn="true">
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guidelineStart"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_percent="0.1" />
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guidelineEnd"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_percent="0.9" />
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guidelineTop"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
app:layout_constraintGuide_percent="0.05" />
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guidelineStatus"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
app:layout_constraintGuide_percent="0.78" />
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guidelineBottom"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
app:layout_constraintGuide_percent="0.97" />
<androidx.camera.view.PreviewView
android:id="@id/cameraImageView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:visibility="@{viewModel.cameraVisibility ? View.VISIBLE : View.GONE}"
/>
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:src="@{viewModel.previewBitMap}"
android:visibility="@{viewModel.previewVisibility ? View.VISIBLE : View.GONE}">
</ImageView>
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:adjustViewBounds="true"
android:contentDescription="@string/photo_mask_caf"
android:scaleType="fitXY"
android:visibility="@{viewModel.maskVisibility ? View.VISIBLE : View.GONE}"
android:src="@{context.getDrawable(viewModel.maskLayout)}" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="10dp"
android:adjustViewBounds="true"
android:contentDescription="@string/close_caf"
android:onClick="@{() -> viewModel.close()}"
android:src="@drawable/ic_back_caf"
app:layout_constraintStart_toStartOf="@id/guidelineStart"
app:layout_constraintTop_toTopOf="@id/guidelineTop" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="10dp"
android:adjustViewBounds="true"
android:contentDescription="@string/switch_caf"
android:onClick="@{() -> viewModel.switchCamera()}"
android:visibility="@{viewModel.switchCameraButtonVisibility ? View.VISIBLE : View.GONE}"
android:src="@drawable/ic_camera_switch"
app:layout_constraintEnd_toEndOf="@id/guidelineEnd"
app:layout_constraintTop_toTopOf="@id/guidelineTop" />
<com.google.android.material.floatingactionbutton.FloatingActionButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="16dp"
android:visibility="@{viewModel.manualCaptureButtonVisibility ? View.VISIBLE : View.GONE}"
android:onClick="@{() -> viewModel.takePhoto()}"
app:layout_constraintStart_toStartOf="@id/guidelineStart"
app:layout_constraintEnd_toEndOf="@id/guidelineEnd"
app:layout_constraintTop_toTopOf="@id/guidelineStatus"
android:contentDescription="@string/take_picture"
app:backgroundTint="?attr/colorPrimary"
app:tint="#FFF"
app:srcCompat="@drawable/ic_camera_caf"/>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:visibility="@{viewModel.statusVisibility ? View.VISIBLE : View.GONE}"
app:layout_constraintStart_toStartOf="@id/guidelineStart"
app:layout_constraintEnd_toEndOf="@id/guidelineEnd"
app:layout_constraintTop_toTopOf="@id/guidelineStatus">
<TextView
android:id="@+id/statusMessage"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:background="@drawable/bg_radius_caf"
android:gravity="center_horizontal"
android:lineSpacingExtra="5sp"
android:padding="8dp"
android:layout_marginTop="10dp"
android:textAlignment="center"
android:textColor="#606060"
android:textSize="15sp"
android:textStyle="bold"
android:text="@{viewModel.statusMessage}"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/triangle_caf"
android:rotation="270"
android:adjustViewBounds="true"
android:contentDescription="@string/nothing_caf"
app:layout_constraintEnd_toEndOf="@id/statusMessage"
app:layout_constraintStart_toStartOf="@id/statusMessage"
app:layout_constraintTop_toTopOf="@id/statusMessage"
app:layout_constraintBottom_toTopOf="@id/statusMessage" />
</androidx.constraintlayout.widget.ConstraintLayout>
<TextView
android:id="@+id/tvCurrentStepName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintBottom_toTopOf="@id/tvPreviousStepName"
app:layout_constraintStart_toStartOf="@id/guidelineStart"
app:layout_constraintEnd_toEndOf="@id/guidelineEnd"
android:layout_marginBottom="5dp"
android:textSize="18sp"
android:textColor="#ffffff"
android:letterSpacing="0.06"
android:text="@{viewModel.currentStepName}"
android:gravity="center_horizontal" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:adjustViewBounds="true"
android:visibility="@{viewModel.currentStepDone ? View.VISIBLE : View.GONE}"
android:contentDescription="@string/check_caf"
app:layout_constraintTop_toTopOf="@id/tvCurrentStepName"
app:layout_constraintBottom_toBottomOf="@id/tvCurrentStepName"
app:layout_constraintEnd_toStartOf="@id/tvCurrentStepName"
android:layout_marginEnd="8dp"
android:src="@drawable/ic_check_caf" />
<TextView
android:id="@+id/tvPreviousStepName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintStart_toStartOf="@id/guidelineStart"
app:layout_constraintEnd_toEndOf="@id/guidelineEnd"
app:layout_constraintBottom_toBottomOf="@id/guidelineBottom"
android:textSize="16sp"
android:textColor="#66FFFFFF"
android:letterSpacing="0.06"
android:text="@{viewModel.previousStepName}"
android:gravity="center_horizontal" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:adjustViewBounds="true"
android:visibility="@{viewModel.previousStepDone ? View.VISIBLE : View.GONE}"
android:contentDescription="@string/check_caf"
app:layout_constraintTop_toTopOf="@id/tvPreviousStepName"
app:layout_constraintBottom_toBottomOf="@id/tvPreviousStepName"
app:layout_constraintEnd_toStartOf="@id/tvPreviousStepName"
android:layout_marginEnd="8dp"
android:alpha="0.4"
android:src="@drawable/ic_check_caf" />
<ProgressBar
android:layout_width="64dp"
android:layout_height="64dp"
android:indeterminate="true"
android:indeterminateTint="?attr/colorPrimary"
android:indeterminateTintMode="src_atop"
android:visibility="@{viewModel.loadingStatus ? View.VISIBLE : View.GONE}"
app:layout_constraintVertical_bias="0.45"
app:layout_constraintBottom_toBottomOf="@id/guidelineBottom"
app:layout_constraintTop_toTopOf="@id/guidelineTop"
app:layout_constraintStart_toStartOf="@id/guidelineStart"
app:layout_constraintEnd_toEndOf="@id/guidelineEnd" />
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>
Styles (setStyle
)
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="windowProperties" parent="Theme.MaterialComponents.Light">
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
<item name="android:windowTranslucentStatus">true</item>
<item name="android:windowActivityTransitions">true</item>
<item name="android:colorControlActivated">#606060</item>
</style>
<style name="defaultStyle" parent="windowProperties">
<item name="colorPrimary">#4CD964</item>
</style>
<style name="defaultButtonStyle" parent="Widget.MaterialComponents.Button">
<item name="android:layout_width">0dp</item>
<item name="android:layout_height">60dp</item>
<item name="android:gravity">center</item>
<item name="android:textColor">#FFFFFF</item>
<item name="android:textSize">18sp</item>
<item name="android:fontFamily">sans-serif</item>
<item name="android:textAllCaps">false</item>
</style>
<style name="transparentButton" parent="Widget.MaterialComponents.Button">
<item name="android:layout_width">0dp</item>
<item name="android:layout_height">60dp</item>
<item name="android:gravity">center</item>
<item name="android:textColor">#323232</item>
<item name="android:textSize">18sp</item>
<item name="android:textStyle">normal</item>
<item name="android:fontFamily">@font/roboto</item>
<item name="android:textAllCaps">false</item>
<item name="android:background">#00FFFFFF</item>
</style>
<style name="textPreview" parent="windowProperties">
<item name="android:textColor">#323232</item>
</style>
</resources>
Mask (setMask
)
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="375dp"
android:height="667dp"
android:viewportWidth="375"
android:viewportHeight="667">
<path
android:pathData="M375,0V667H0V0H375ZM341,85H35V516H341V85Z"
android:strokeAlpha="0.35"
android:fillColor="#000000"
android:fillType="evenOdd"
android:fillAlpha="0.35"/>
<!--
The color of the mask can be changed by the android:fillColor attribute of the element below.
The default colors are: #22CB7B (green), #E74C3C (red), #ffffff (white)
-->
<path
android:pathData="M33.5,85C33.5,84.172 34.172,83.5 35,83.5H37.452C38.28,83.5 38.952,84.172 38.952,85C38.952,85.828 38.28,86.5 37.452,86.5H36.5V87.494C36.5,88.323 35.828,88.994 35,88.994C34.172,88.994 33.5,88.323 33.5,87.494V85ZM42.817,85C42.817,84.172 43.489,83.5 44.317,83.5H49.221C50.05,83.5 50.721,84.172 50.721,85C50.721,85.828 50.05,86.5 49.221,86.5H44.317C43.489,86.5 42.817,85.828 42.817,85ZM54.587,85C54.587,84.172 55.258,83.5 56.087,83.5H60.99C61.819,83.5 62.49,84.172 62.49,85C62.49,85.828 61.819,86.5 60.99,86.5H56.087C55.258,86.5 54.587,85.828 54.587,85ZM66.356,85C66.356,84.172 67.027,83.5 67.856,83.5H72.76C73.588,83.5 74.26,84.172 74.26,85C74.26,85.828 73.588,86.5 72.76,86.5H67.856C67.027,86.5 66.356,85.828 66.356,85ZM78.125,85C78.125,84.172 78.797,83.5 79.625,83.5H84.529C85.357,83.5 86.029,84.172 86.029,85C86.029,85.828 85.357,86.5 84.529,86.5H79.625C78.797,86.5 78.125,85.828 78.125,85ZM89.894,85C89.894,84.172 90.566,83.5 91.394,83.5H96.298C97.127,83.5 97.798,84.172 97.798,85C97.798,85.828 97.127,86.5 96.298,86.5H91.394C90.566,86.5 89.894,85.828 89.894,85ZM101.663,85C101.663,84.172 102.335,83.5 103.163,83.5H108.067C108.896,83.5 109.567,84.172 109.567,85C109.567,85.828 108.896,86.5 108.067,86.5H103.163C102.335,86.5 101.663,85.828 101.663,85ZM113.433,85C113.433,84.172 114.104,83.5 114.933,83.5H119.837C120.665,83.5 121.337,84.172 121.337,85C121.337,85.828 120.665,86.5 119.837,86.5H114.933C114.104,86.5 113.433,85.828 113.433,85ZM125.202,85C125.202,84.172 125.874,83.5 126.702,83.5H131.606C132.434,83.5 133.106,84.172 133.106,85C133.106,85.828 132.434,86.5 131.606,86.5H126.702C125.874,86.5 125.202,85.828 125.202,85ZM136.971,85C136.971,84.172 137.643,83.5 138.471,83.5H143.375C144.203,83.5 144.875,84.172 144.875,85C144.875,85.828 144.203,86.5 143.375,86.5H138.471C137.643,86.5 136.971,85.828 136.971,85ZM148.74,85C148.74,84.172 149.412,83.5 150.24,83.5H155.144C155.973,83.5 156.644,84.172 156.644,85C156.644,85.828 155.973,86.5 155.144,86.5H150.24C149.412,86.5 148.74,85.828 148.74,85ZM160.51,85C160.51,84.172 161.181,83.5 162.01,83.5H166.913C167.742,83.5 168.413,84.172 168.413,85C168.413,85.828 167.742,86.5 166.913,86.5H162.01C161.181,86.5 160.51,85.828 160.51,85ZM172.279,85C172.279,84.172 172.95,83.5 173.779,83.5H178.683C179.511,83.5 180.183,84.172 180.183,85C180.183,85.828 179.511,86.5 178.683,86.5H173.779C172.95,86.5 172.279,85.828 172.279,85ZM184.048,85C184.048,84.172 184.72,83.5 185.548,83.5H190.452C191.28,83.5 191.952,84.172 191.952,85C191.952,85.828 191.28,86.5 190.452,86.5H185.548C184.72,86.5 184.048,85.828 184.048,85ZM195.817,85C195.817,84.172 196.489,83.5 197.317,83.5H202.221C203.05,83.5 203.721,84.172 203.721,85C203.721,85.828 203.05,86.5 202.221,86.5H197.317C196.489,86.5 195.817,85.828 195.817,85ZM207.587,85C207.587,84.172 208.258,83.5 209.087,83.5H213.99C214.819,83.5 215.49,84.172 215.49,85C215.49,85.828 214.819,86.5 213.99,86.5H209.087C208.258,86.5 207.587,85.828 207.587,85ZM219.356,85C219.356,84.172 220.027,83.5 220.856,83.5H225.76C226.588,83.5 227.26,84.172 227.26,85C227.26,85.828 226.588,86.5 225.76,86.5H220.856C220.027,86.5 219.356,85.828 219.356,85ZM231.125,85C231.125,84.172 231.797,83.5 232.625,83.5H237.529C238.357,83.5 239.029,84.172 239.029,85C239.029,85.828 238.357,86.5 237.529,86.5H232.625C231.797,86.5 231.125,85.828 231.125,85ZM242.894,85C242.894,84.172 243.566,83.5 244.394,83.5H249.298C250.127,83.5 250.798,84.172 250.798,85C250.798,85.828 250.127,86.5 249.298,86.5H244.394C243.566,86.5 242.894,85.828 242.894,85ZM254.663,85C254.663,84.172 255.335,83.5 256.163,83.5H261.067C261.896,83.5 262.567,84.172 262.567,85C262.567,85.828 261.896,86.5 261.067,86.5H256.163C255.335,86.5 254.663,85.828 254.663,85ZM266.433,85C266.433,84.172 267.104,83.5 267.933,83.5H272.837C273.665,83.5 274.337,84.172 274.337,85C274.337,85.828 273.665,86.5 272.837,86.5H267.933C267.104,86.5 266.433,85.828 266.433,85ZM278.202,85C278.202,84.172 278.874,83.5 279.702,83.5H284.606C285.434,83.5 286.106,84.172 286.106,85C286.106,85.828 285.434,86.5 284.606,86.5H279.702C278.874,86.5 278.202,85.828 278.202,85ZM289.971,85C289.971,84.172 290.643,83.5 291.471,83.5H296.375C297.203,83.5 297.875,84.172 297.875,85C297.875,85.828 297.203,86.5 296.375,86.5H291.471C290.643,86.5 289.971,85.828 289.971,85ZM301.74,85C301.74,84.172 302.412,83.5 303.24,83.5H308.144C308.973,83.5 309.644,84.172 309.644,85C309.644,85.828 308.973,86.5 308.144,86.5H303.24C302.412,86.5 301.74,85.828 301.74,85ZM313.51,85C313.51,84.172 314.181,83.5 315.01,83.5H319.913C320.742,83.5 321.413,84.172 321.413,85C321.413,85.828 320.742,86.5 319.913,86.5H315.01C314.181,86.5 313.51,85.828 313.51,85ZM325.279,85C325.279,84.172 325.95,83.5 326.779,83.5H331.683C332.511,83.5 333.183,84.172 333.183,85C333.183,85.828 332.511,86.5 331.683,86.5H326.779C325.95,86.5 325.279,85.828 325.279,85ZM337.048,85C337.048,84.172 337.72,83.5 338.548,83.5H341C341.828,83.5 342.5,84.172 342.5,85V87.494C342.5,88.323 341.828,88.994 341,88.994C340.172,88.994 339.5,88.323 339.5,87.494V86.5H338.548C337.72,86.5 337.048,85.828 337.048,85ZM341,92.978C341.828,92.978 342.5,93.65 342.5,94.478V99.466C342.5,100.295 341.828,100.966 341,100.966C340.172,100.966 339.5,100.295 339.5,99.466V94.478C339.5,93.65 340.172,92.978 341,92.978ZM35,92.978C35.828,92.978 36.5,93.65 36.5,94.478V99.466C36.5,100.295 35.828,100.966 35,100.966C34.172,100.966 33.5,100.295 33.5,99.466V94.478C33.5,93.65 34.172,92.978 35,92.978ZM341,104.95C341.828,104.95 342.5,105.622 342.5,106.45V111.439C342.5,112.267 341.828,112.939 341,112.939C340.172,112.939 339.5,112.267 339.5,111.439V106.45C339.5,105.622 340.172,104.95 341,104.95ZM35,104.95C35.828,104.95 36.5,105.622 36.5,106.45V111.439C36.5,112.267 35.828,112.939 35,112.939C34.172,112.939 33.5,112.267 33.5,111.439V106.45C33.5,105.622 34.172,104.95 35,104.95ZM35,116.922C35.828,116.922 36.5,117.594 36.5,118.422V123.411C36.5,124.239 35.828,124.911 35,124.911C34.172,124.911 33.5,124.239 33.5,123.411V118.422C33.5,117.594 34.172,116.922 35,116.922ZM341,116.922C341.828,116.922 342.5,117.594 342.5,118.422V123.411C342.5,124.239 341.828,124.911 341,124.911C340.172,124.911 339.5,124.239 339.5,123.411V118.422C339.5,117.594 340.172,116.922 341,116.922ZM35,128.895C35.828,128.895 36.5,129.566 36.5,130.395V135.383C36.5,136.212 35.828,136.883 35,136.883C34.172,136.883 33.5,136.212 33.5,135.383V130.395C33.5,129.566 34.172,128.895 35,128.895ZM341,128.895C341.828,128.895 342.5,129.566 342.5,130.395V135.383C342.5,136.212 341.828,136.883 341,136.883C340.172,136.883 339.5,136.212 339.5,135.383V130.395C339.5,129.566 340.172,128.895 341,128.895ZM35,140.867C35.828,140.867 36.5,141.538 36.5,142.367V147.355C36.5,148.184 35.828,148.855 35,148.855C34.172,148.855 33.5,148.184 33.5,147.355V142.367C33.5,141.538 34.172,140.867 35,140.867ZM341,140.867C341.828,140.867 342.5,141.538 342.5,142.367V147.355C342.5,148.184 341.828,148.855 341,148.855C340.172,148.855 339.5,148.184 339.5,147.355V142.367C339.5,141.538 340.172,140.867 341,140.867ZM35,152.839C35.828,152.839 36.5,153.511 36.5,154.339V159.328C36.5,160.156 35.828,160.828 35,160.828C34.172,160.828 33.5,160.156 33.5,159.328V154.339C33.5,153.511 34.172,152.839 35,152.839ZM341,152.839C341.828,152.839 342.5,153.511 342.5,154.339V159.328C342.5,160.156 341.828,160.828 341,160.828C340.172,160.828 339.5,160.156 339.5,159.328V154.339C339.5,153.511 340.172,152.839 341,152.839ZM35,164.811C35.828,164.811 36.5,165.483 36.5,166.311V171.3C36.5,172.128 35.828,172.8 35,172.8C34.172,172.8 33.5,172.128 33.5,171.3V166.311C33.5,165.483 34.172,164.811 35,164.811ZM341,164.811C341.828,164.811 342.5,165.483 342.5,166.311V171.3C342.5,172.128 341.828,172.8 341,172.8C340.172,172.8 339.5,172.128 339.5,171.3V166.311C339.5,165.483 340.172,164.811 341,164.811ZM35,176.784C35.828,176.784 36.5,177.455 36.5,178.284V183.272C36.5,184.1 35.828,184.772 35,184.772C34.172,184.772 33.5,184.1 33.5,183.272V178.284C33.5,177.455 34.172,176.784 35,176.784ZM341,176.784C341.828,176.784 342.5,177.455 342.5,178.284V183.272C342.5,184.1 341.828,184.772 341,184.772C340.172,184.772 339.5,184.1 339.5,183.272V178.284C339.5,177.455 340.172,176.784 341,176.784ZM35,188.756C35.828,188.756 36.5,189.427 36.5,190.256V195.244C36.5,196.073 35.828,196.744 35,196.744C34.172,196.744 33.5,196.073 33.5,195.244V190.256C33.5,189.427 34.172,188.756 35,188.756ZM341,188.756C341.828,188.756 342.5,189.427 342.5,190.256V195.244C342.5,196.073 341.828,196.744 341,196.744C340.172,196.744 339.5,196.073 339.5,195.244V190.256C339.5,189.427 340.172,188.756 341,188.756ZM35,200.728C35.828,200.728 36.5,201.4 36.5,202.228V207.216C36.5,208.045 35.828,208.716 35,208.716C34.172,208.716 33.5,208.045 33.5,207.216V202.228C33.5,201.4 34.172,200.728 35,200.728ZM341,200.728C341.828,200.728 342.5,201.4 342.5,202.228V207.216C342.5,208.045 341.828,208.716 341,208.716C340.172,208.716 339.5,208.045 339.5,207.216V202.228C339.5,201.4 340.172,200.728 341,200.728ZM35,212.7C35.828,212.7 36.5,213.372 36.5,214.2V219.189C36.5,220.017 35.828,220.689 35,220.689C34.172,220.689 33.5,220.017 33.5,219.189V214.2C33.5,213.372 34.172,212.7 35,212.7ZM341,212.7C341.828,212.7 342.5,213.372 342.5,214.2V219.189C342.5,220.017 341.828,220.689 341,220.689C340.172,220.689 339.5,220.017 339.5,219.189V214.2C339.5,213.372 340.172,212.7 341,212.7ZM35,224.672C35.828,224.672 36.5,225.344 36.5,226.172V231.161C36.5,231.989 35.828,232.661 35,232.661C34.172,232.661 33.5,231.989 33.5,231.161V226.172C33.5,225.344 34.172,224.672 35,224.672ZM341,224.673C341.828,224.673 342.5,225.344 342.5,226.173V231.161C342.5,231.989 341.828,232.661 341,232.661C340.172,232.661 339.5,231.989 339.5,231.161V226.173C339.5,225.344 340.172,224.673 341,224.673ZM35,236.645C35.828,236.645 36.5,237.316 36.5,238.145V243.133C36.5,243.962 35.828,244.633 35,244.633C34.172,244.633 33.5,243.962 33.5,243.133V238.145C33.5,237.316 34.172,236.645 35,236.645ZM341,236.645C341.828,236.645 342.5,237.316 342.5,238.145V243.133C342.5,243.962 341.828,244.633 341,244.633C340.172,244.633 339.5,243.962 339.5,243.133V238.145C339.5,237.316 340.172,236.645 341,236.645ZM35,248.617C35.828,248.617 36.5,249.288 36.5,250.117V255.105C36.5,255.934 35.828,256.605 35,256.605C34.172,256.605 33.5,255.934 33.5,255.105V250.117C33.5,249.288 34.172,248.617 35,248.617ZM341,248.617C341.828,248.617 342.5,249.289 342.5,250.117V255.105C342.5,255.934 341.828,256.605 341,256.605C340.172,256.605 339.5,255.934 339.5,255.105V250.117C339.5,249.289 340.172,248.617 341,248.617ZM35,260.589C35.828,260.589 36.5,261.261 36.5,262.089V267.077C36.5,267.906 35.828,268.577 35,268.577C34.172,268.577 33.5,267.906 33.5,267.077V262.089C33.5,261.261 34.172,260.589 35,260.589ZM341,260.589C341.828,260.589 342.5,261.261 342.5,262.089V267.078C342.5,267.906 341.828,268.578 341,268.578C340.172,268.578 339.5,267.906 339.5,267.078V262.089C339.5,261.261 340.172,260.589 341,260.589ZM35,272.561C35.828,272.561 36.5,273.233 36.5,274.061V279.05C36.5,279.878 35.828,280.55 35,280.55C34.172,280.55 33.5,279.878 33.5,279.05V274.061C33.5,273.233 34.172,272.561 35,272.561ZM341,272.561C341.828,272.561 342.5,273.233 342.5,274.061V279.05C342.5,279.878 341.828,280.55 341,280.55C340.172,280.55 339.5,279.878 339.5,279.05V274.061C339.5,273.233 340.172,272.561 341,272.561ZM35,284.534C35.828,284.534 36.5,285.205 36.5,286.034V291.022C36.5,291.85 35.828,292.522 35,292.522C34.172,292.522 33.5,291.85 33.5,291.022V286.034C33.5,285.205 34.172,284.534 35,284.534ZM341,284.534C341.828,284.534 342.5,285.205 342.5,286.034V291.022C342.5,291.85 341.828,292.522 341,292.522C340.172,292.522 339.5,291.85 339.5,291.022V286.034C339.5,285.205 340.172,284.534 341,284.534ZM35,296.506C35.828,296.506 36.5,297.177 36.5,298.006V302.994C36.5,303.823 35.828,304.494 35,304.494C34.172,304.494 33.5,303.823 33.5,302.994V298.006C33.5,297.177 34.172,296.506 35,296.506ZM341,296.506C341.828,296.506 342.5,297.177 342.5,298.006V302.994C342.5,303.823 341.828,304.494 341,304.494C340.172,304.494 339.5,303.823 339.5,302.994V298.006C339.5,297.177 340.172,296.506 341,296.506ZM35,308.478C35.828,308.478 36.5,309.15 36.5,309.978V314.966C36.5,315.795 35.828,316.466 35,316.466C34.172,316.466 33.5,315.795 33.5,314.966V309.978C33.5,309.15 34.172,308.478 35,308.478ZM341,308.478C341.828,308.478 342.5,309.15 342.5,309.978V314.966C342.5,315.795 341.828,316.466 341,316.466C340.172,316.466 339.5,315.795 339.5,314.966V309.978C339.5,309.15 340.172,308.478 341,308.478ZM35,320.45C35.828,320.45 36.5,321.122 36.5,321.95V326.939C36.5,327.767 35.828,328.439 35,328.439C34.172,328.439 33.5,327.767 33.5,326.939V321.95C33.5,321.122 34.172,320.45 35,320.45ZM341,320.45C341.828,320.45 342.5,321.122 342.5,321.95V326.939C342.5,327.767 341.828,328.439 341,328.439C340.172,328.439 339.5,327.767 339.5,326.939V321.95C339.5,321.122 340.172,320.45 341,320.45ZM35,332.422C35.828,332.422 36.5,333.094 36.5,333.922V338.911C36.5,339.739 35.828,340.411 35,340.411C34.172,340.411 33.5,339.739 33.5,338.911V333.922C33.5,333.094 34.172,332.422 35,332.422ZM341,332.423C341.828,332.423 342.5,333.094 342.5,333.923V338.911C342.5,339.739 341.828,340.411 341,340.411C340.172,340.411 339.5,339.739 339.5,338.911V333.923C339.5,333.094 340.172,332.423 341,332.423ZM35,344.395C35.828,344.395 36.5,345.066 36.5,345.895V350.883C36.5,351.711 35.828,352.383 35,352.383C34.172,352.383 33.5,351.711 33.5,350.883V345.895C33.5,345.066 34.172,344.395 35,344.395ZM341,344.395C341.828,344.395 342.5,345.066 342.5,345.895V350.883C342.5,351.712 341.828,352.383 341,352.383C340.172,352.383 339.5,351.712 339.5,350.883V345.895C339.5,345.066 340.172,344.395 341,344.395ZM35,356.367C35.828,356.367 36.5,357.038 36.5,357.867V362.855C36.5,363.684 35.828,364.355 35,364.355C34.172,364.355 33.5,363.684 33.5,362.855V357.867C33.5,357.038 34.172,356.367 35,356.367ZM341,356.367C341.828,356.367 342.5,357.039 342.5,357.867V362.855C342.5,363.684 341.828,364.355 341,364.355C340.172,364.355 339.5,363.684 339.5,362.855V357.867C339.5,357.039 340.172,356.367 341,356.367ZM35,368.339C35.828,368.339 36.5,369.011 36.5,369.839V374.827C36.5,375.656 35.828,376.327 35,376.327C34.172,376.327 33.5,375.656 33.5,374.827V369.839C33.5,369.011 34.172,368.339 35,368.339ZM341,368.339C341.828,368.339 342.5,369.011 342.5,369.839V374.828C342.5,375.656 341.828,376.328 341,376.328C340.172,376.328 339.5,375.656 339.5,374.828V369.839C339.5,369.011 340.172,368.339 341,368.339ZM35,380.311C35.828,380.311 36.5,380.983 36.5,381.811V386.8C36.5,387.628 35.828,388.3 35,388.3C34.172,388.3 33.5,387.628 33.5,386.8V381.811C33.5,380.983 34.172,380.311 35,380.311ZM341,380.311C341.828,380.311 342.5,380.983 342.5,381.811V386.8C342.5,387.628 341.828,388.3 341,388.3C340.172,388.3 339.5,387.628 339.5,386.8V381.811C339.5,380.983 340.172,380.311 341,380.311ZM35,392.284C35.828,392.284 36.5,392.955 36.5,393.784V398.772C36.5,399.6 35.828,400.272 35,400.272C34.172,400.272 33.5,399.6 33.5,398.772V393.784C33.5,392.955 34.172,392.284 35,392.284ZM341,392.284C341.828,392.284 342.5,392.955 342.5,393.784V398.772C342.5,399.6 341.828,400.272 341,400.272C340.172,400.272 339.5,399.6 339.5,398.772V393.784C339.5,392.955 340.172,392.284 341,392.284ZM35,404.256C35.828,404.256 36.5,404.927 36.5,405.756V410.744C36.5,411.573 35.828,412.244 35,412.244C34.172,412.244 33.5,411.573 33.5,410.744V405.756C33.5,404.927 34.172,404.256 35,404.256ZM341,404.256C341.828,404.256 342.5,404.927 342.5,405.756V410.744C342.5,411.573 341.828,412.244 341,412.244C340.172,412.244 339.5,411.573 339.5,410.744V405.756C339.5,404.927 340.172,404.256 341,404.256ZM35,416.228C35.828,416.228 36.5,416.9 36.5,417.728V422.716C36.5,423.545 35.828,424.216 35,424.216C34.172,424.216 33.5,423.545 33.5,422.716V417.728C33.5,416.9 34.172,416.228 35,416.228ZM341,416.228C341.828,416.228 342.5,416.9 342.5,417.728V422.716C342.5,423.545 341.828,424.216 341,424.216C340.172,424.216 339.5,423.545 339.5,422.716V417.728C339.5,416.9 340.172,416.228 341,416.228ZM35,428.2C35.828,428.2 36.5,428.872 36.5,429.7V434.689C36.5,435.517 35.828,436.189 35,436.189C34.172,436.189 33.5,435.517 33.5,434.689V429.7C33.5,428.872 34.172,428.2 35,428.2ZM341,428.2C341.828,428.2 342.5,428.872 342.5,429.7V434.689C342.5,435.517 341.828,436.189 341,436.189C340.172,436.189 339.5,435.517 339.5,434.689V429.7C339.5,428.872 340.172,428.2 341,428.2ZM35,440.172C35.828,440.172 36.5,440.844 36.5,441.672V446.661C36.5,447.489 35.828,448.161 35,448.161C34.172,448.161 33.5,447.489 33.5,446.661V441.672C33.5,440.844 34.172,440.172 35,440.172ZM341,440.172C341.828,440.172 342.5,440.844 342.5,441.672V446.661C342.5,447.489 341.828,448.161 341,448.161C340.172,448.161 339.5,447.489 339.5,446.661V441.672C339.5,440.844 340.172,440.172 341,440.172ZM35,452.145C35.828,452.145 36.5,452.816 36.5,453.645V458.633C36.5,459.462 35.828,460.133 35,460.133C34.172,460.133 33.5,459.462 33.5,458.633V453.645C33.5,452.816 34.172,452.145 35,452.145ZM341,452.145C341.828,452.145 342.5,452.816 342.5,453.645V458.633C342.5,459.462 341.828,460.133 341,460.133C340.172,460.133 339.5,459.462 339.5,458.633V453.645C339.5,452.816 340.172,452.145 341,452.145ZM35,464.117C35.828,464.117 36.5,464.788 36.5,465.617V470.605C36.5,471.434 35.828,472.105 35,472.105C34.172,472.105 33.5,471.434 33.5,470.605V465.617C33.5,464.788 34.172,464.117 35,464.117ZM341,464.117C341.828,464.117 342.5,464.788 342.5,465.617V470.605C342.5,471.434 341.828,472.105 341,472.105C340.172,472.105 339.5,471.434 339.5,470.605V465.617C339.5,464.788 340.172,464.117 341,464.117ZM35,476.089C35.828,476.089 36.5,476.761 36.5,477.589V482.578C36.5,483.406 35.828,484.078 35,484.078C34.172,484.078 33.5,483.406 33.5,482.578V477.589C33.5,476.761 34.172,476.089 35,476.089ZM341,476.089C341.828,476.089 342.5,476.761 342.5,477.589V482.578C342.5,483.406 341.828,484.078 341,484.078C340.172,484.078 339.5,483.406 339.5,482.578V477.589C339.5,476.761 340.172,476.089 341,476.089ZM35,488.061C35.828,488.061 36.5,488.733 36.5,489.561V494.55C36.5,495.378 35.828,496.05 35,496.05C34.172,496.05 33.5,495.378 33.5,494.55V489.561C33.5,488.733 34.172,488.061 35,488.061ZM341,488.061C341.828,488.061 342.5,488.733 342.5,489.561V494.55C342.5,495.378 341.828,496.05 341,496.05C340.172,496.05 339.5,495.378 339.5,494.55V489.561C339.5,488.733 340.172,488.061 341,488.061ZM35,500.034C35.828,500.034 36.5,500.705 36.5,501.534V506.522C36.5,507.35 35.828,508.022 35,508.022C34.172,508.022 33.5,507.35 33.5,506.522V501.534C33.5,500.705 34.172,500.034 35,500.034ZM341,500.034C341.828,500.034 342.5,500.705 342.5,501.534V506.522C342.5,507.35 341.828,508.022 341,508.022C340.172,508.022 339.5,507.35 339.5,506.522V501.534C339.5,500.705 340.172,500.034 341,500.034ZM35,512.006C35.828,512.006 36.5,512.677 36.5,513.506V514.5H37.452C38.28,514.5 38.952,515.172 38.952,516C38.952,516.828 38.28,517.5 37.452,517.5H35C34.172,517.5 33.5,516.828 33.5,516V513.506C33.5,512.677 34.172,512.006 35,512.006ZM341,512.006C341.828,512.006 342.5,512.677 342.5,513.506V516C342.5,516.828 341.828,517.5 341,517.5H338.548C337.72,517.5 337.048,516.828 337.048,516C337.048,515.172 337.72,514.5 338.548,514.5H339.5V513.506C339.5,512.677 340.172,512.006 341,512.006ZM42.817,516C42.817,515.172 43.489,514.5 44.317,514.5H49.221C50.05,514.5 50.721,515.172 50.721,516C50.721,516.828 50.05,517.5 49.221,517.5H44.317C43.489,517.5 42.817,516.828 42.817,516ZM54.586,516C54.586,515.172 55.258,514.5 56.086,514.5H60.99C61.819,514.5 62.49,515.172 62.49,516C62.49,516.828 61.819,517.5 60.99,517.5H56.086C55.258,517.5 54.586,516.828 54.586,516ZM66.356,516C66.356,515.172 67.027,514.5 67.856,514.5H72.76C73.588,514.5 74.26,515.172 74.26,516C74.26,516.828 73.588,517.5 72.76,517.5H67.856C67.027,517.5 66.356,516.828 66.356,516ZM78.125,516C78.125,515.172 78.797,514.5 79.625,514.5H84.529C85.357,514.5 86.029,515.172 86.029,516C86.029,516.828 85.357,517.5 84.529,517.5H79.625C78.797,517.5 78.125,516.828 78.125,516ZM89.894,516C89.894,515.172 90.566,514.5 91.394,514.5H96.298C97.127,514.5 97.798,515.172 97.798,516C97.798,516.828 97.127,517.5 96.298,517.5H91.394C90.566,517.5 89.894,516.828 89.894,516ZM101.663,516C101.663,515.172 102.335,514.5 103.163,514.5H108.067C108.896,514.5 109.567,515.172 109.567,516C109.567,516.828 108.896,517.5 108.067,517.5H103.163C102.335,517.5 101.663,516.828 101.663,516ZM113.433,516C113.433,515.172 114.104,514.5 114.933,514.5H119.837C120.665,514.5 121.337,515.172 121.337,516C121.337,516.828 120.665,517.5 119.837,517.5H114.933C114.104,517.5 113.433,516.828 113.433,516ZM125.202,516C125.202,515.172 125.873,514.5 126.702,514.5H131.606C132.434,514.5 133.106,515.172 133.106,516C133.106,516.828 132.434,517.5 131.606,517.5H126.702C125.873,517.5 125.202,516.828 125.202,516ZM136.971,516C136.971,515.172 137.643,514.5 138.471,514.5H143.375C144.203,514.5 144.875,515.172 144.875,516C144.875,516.828 144.203,517.5 143.375,517.5H138.471C137.643,517.5 136.971,516.828 136.971,516ZM148.74,516C148.74,515.172 149.412,514.5 150.24,514.5H155.144C155.973,514.5 156.644,515.172 156.644,516C156.644,516.828 155.973,517.5 155.144,517.5H150.24C149.412,517.5 148.74,516.828 148.74,516ZM160.51,516C160.51,515.172 161.181,514.5 162.01,514.5H166.913C167.742,514.5 168.413,515.172 168.413,516C168.413,516.828 167.742,517.5 166.913,517.5H162.01C161.181,517.5 160.51,516.828 160.51,516ZM172.279,516C172.279,515.172 172.95,514.5 173.779,514.5H178.683C179.511,514.5 180.183,515.172 180.183,516C180.183,516.828 179.511,517.5 178.683,517.5H173.779C172.95,517.5 172.279,516.828 172.279,516ZM184.048,516C184.048,515.172 184.72,514.5 185.548,514.5H190.452C191.28,514.5 191.952,515.172 191.952,516C191.952,516.828 191.28,517.5 190.452,517.5H185.548C184.72,517.5 184.048,516.828 184.048,516ZM195.817,516C195.817,515.172 196.489,514.5 197.317,514.5H202.221C203.05,514.5 203.721,515.172 203.721,516C203.721,516.828 203.05,517.5 202.221,517.5H197.317C196.489,517.5 195.817,516.828 195.817,516ZM207.587,516C207.587,515.172 208.258,514.5 209.087,514.5H213.99C214.819,514.5 215.49,515.172 215.49,516C215.49,516.828 214.819,517.5 213.99,517.5H209.087C208.258,517.5 207.587,516.828 207.587,516ZM219.356,516C219.356,515.172 220.027,514.5 220.856,514.5H225.76C226.588,514.5 227.26,515.172 227.26,516C227.26,516.828 226.588,517.5 225.76,517.5H220.856C220.027,517.5 219.356,516.828 219.356,516ZM231.125,516C231.125,515.172 231.797,514.5 232.625,514.5H237.529C238.357,514.5 239.029,515.172 239.029,516C239.029,516.828 238.357,517.5 237.529,517.5H232.625C231.797,517.5 231.125,516.828 231.125,516ZM242.894,516C242.894,515.172 243.566,514.5 244.394,514.5H249.298C250.126,514.5 250.798,515.172 250.798,516C250.798,516.828 250.126,517.5 249.298,517.5H244.394C243.566,517.5 242.894,516.828 242.894,516ZM254.663,516C254.663,515.172 255.335,514.5 256.163,514.5H261.067C261.896,514.5 262.567,515.172 262.567,516C262.567,516.828 261.896,517.5 261.067,517.5H256.163C255.335,517.5 254.663,516.828 254.663,516ZM266.433,516C266.433,515.172 267.104,514.5 267.933,514.5H272.837C273.665,514.5 274.337,515.172 274.337,516C274.337,516.828 273.665,517.5 272.837,517.5H267.933C267.104,517.5 266.433,516.828 266.433,516ZM278.202,516C278.202,515.172 278.873,514.5 279.702,514.5H284.606C285.434,514.5 286.106,515.172 286.106,516C286.106,516.828 285.434,517.5 284.606,517.5H279.702C278.873,517.5 278.202,516.828 278.202,516ZM289.971,516C289.971,515.172 290.643,514.5 291.471,514.5H296.375C297.203,514.5 297.875,515.172 297.875,516C297.875,516.828 297.203,517.5 296.375,517.5H291.471C290.643,517.5 289.971,516.828 289.971,516ZM301.74,516C301.74,515.172 302.412,514.5 303.24,514.5H308.144C308.973,514.5 309.644,515.172 309.644,516C309.644,516.828 308.973,517.5 308.144,517.5H303.24C302.412,517.5 301.74,516.828 301.74,516ZM313.51,516C313.51,515.172 314.181,514.5 315.01,514.5H319.913C320.742,514.5 321.413,515.172 321.413,516C321.413,516.828 320.742,517.5 319.913,517.5H315.01C314.181,517.5 313.51,516.828 313.51,516ZM325.279,516C325.279,515.172 325.95,514.5 326.779,514.5H331.683C332.511,514.5 333.183,515.172 333.183,516C333.183,516.828 332.511,517.5 331.683,517.5H326.779C325.95,517.5 325.279,516.828 325.279,516Z"
android:fillColor="#22CB7B"
android:fillType="evenOdd"/>
</vector>
Activity (setLayout
)
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<data>
<import type="android.view.View" />
<import type="com.combateafraude.documentdetector.R" />
<variable
name="viewModel"
type="com.combateafraude.documentdetector.controller.viewmodel.SDKViewModel" />
</data>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/caf_black"
android:keepScreenOn="true">
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guidelineStart"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_percent="0.1" />
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guidelineEnd"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_percent="0.9" />
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guidelineTop"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
app:layout_constraintGuide_percent="0.05" />
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guidelineBottom"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
app:layout_constraintGuide_percent="0.97" />
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:elevation="1dp"
app:layout_constraintEnd_toEndOf="@id/frameCameraPreview"
app:layout_constraintStart_toStartOf="@id/frameCameraPreview"
app:layout_constraintTop_toTopOf="@id/frameCameraPreview">
<ImageView
android:id="@+id/closeImage"
android:layout_width="32dp"
android:layout_height="32dp"
android:layout_marginStart="16dp"
android:layout_marginTop="16dp"
android:adjustViewBounds="true"
android:contentDescription="@string/close_caf"
android:onClick="@{() -> viewModel.close()}"
android:src="@drawable/close_capture"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/tvCurrentStepName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:gravity="center_horizontal"
android:lineSpacingExtra="5sp"
android:paddingHorizontal="12dp"
android:paddingVertical="4dp"
android:text="@{viewModel.stepName}"
android:textColor="@color/caf_white"
android:textSize="16sp"
android:textStyle="bold"
android:visibility="@{(viewModel.stepNameVisibility && viewModel.stepName.length() > 0) ? View.VISIBLE : View.INVISIBLE}"
app:cafBackgroundColor="@{R.color.mask_color_black_background}"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:text="CNH" />
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guidelineTopCameraPreview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
app:layout_constraintGuide_percent=".06" />
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guidelineBottomCameraPreview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
app:layout_constraintGuide_percent=".94" />
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guidelineStartCameraPreview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_percent=".04" />
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guidelineEndCameraPreview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_percent=".96" />
<FrameLayout
android:id="@+id/frameCameraPreview"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintBottom_toBottomOf="@id/guidelineBottomCameraPreview"
app:layout_constraintEnd_toEndOf="@id/guidelineEndCameraPreview"
app:layout_constraintStart_toStartOf="@id/guidelineStartCameraPreview"
app:layout_constraintTop_toTopOf="@id/guidelineTopCameraPreview">
<androidx.cardview.widget.CardView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:elevation="0dp"
app:cardCornerRadius="16dp">
<androidx.camera.view.PreviewView
android:id="@id/cameraImageView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:visibility="@{viewModel.cameraVisibility ? View.VISIBLE : View.GONE}" />
<ImageView
android:layout_width="match_parent"
android:layout_height="80dp"
android:importantForAccessibility="no"
android:src="@drawable/preview_camera_gradient" />
<ImageView
android:id="@+id/previewBitmap"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:importantForAccessibility="no"
android:src="@{viewModel.previewBitMap}"
android:visibility="@{viewModel.previewVisibility ? View.VISIBLE : View.GONE}" />
</androidx.cardview.widget.CardView>
</FrameLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/maskInfoContainer"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintBottom_toBottomOf="@id/guidelineBottom"
app:layout_constraintEnd_toEndOf="@id/guidelineEnd"
app:layout_constraintStart_toStartOf="@id/guidelineStart"
app:layout_constraintTop_toTopOf="@id/guidelineTop">
<ImageView
android:id="@+id/maskImage"
android:layout_width="80dp"
android:layout_height="80dp"
android:adjustViewBounds="true"
android:contentDescription="@string/photo_mask_caf"
android:src="@{viewModel.feedbackImage}"
android:visibility="@{viewModel.feedbackImageVisibility ? View.VISIBLE : View.INVISIBLE}"
app:cafBackgroundColor="@{viewModel.feedbackStatusBackground}"
app:layout_constraintBottom_toBottomOf="@id/maskInfoContainer"
app:layout_constraintEnd_toEndOf="@id/maskInfoContainer"
app:layout_constraintStart_toStartOf="@id/maskInfoContainer"
app:layout_constraintTop_toTopOf="@id/maskInfoContainer"
app:layout_constraintVertical_bias="0.40"
tools:src="@drawable/center_image" />
<TextView
android:id="@+id/statusMessage"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="8dp"
android:gravity="center_horizontal"
android:lineSpacingExtra="5sp"
android:paddingHorizontal="12dp"
android:paddingVertical="4dp"
android:text="@{viewModel.feedbackStatusMessage}"
android:textAlignment="center"
android:textColor="#FFFFFF"
android:textSize="15sp"
android:textStyle="bold"
android:visibility="@{viewModel.feedbackStatusMessage.length() > 0 ? View.VISIBLE : View.GONE}"
app:cafBackgroundColor="@{viewModel.feedbackStatusBackground}"
app:layout_constraintEnd_toEndOf="@id/maskInfoContainer"
app:layout_constraintStart_toStartOf="@id/maskInfoContainer"
app:layout_constraintTop_toBottomOf="@id/maskImage"
tools:background="@drawable/bg_radius_caf" />
</androidx.constraintlayout.widget.ConstraintLayout>
<ImageButton
android:id="@+id/floatingActionButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="16dp"
android:background="@null"
android:contentDescription="@string/take_picture"
android:onClick="@{() -> viewModel.takePhoto()}"
android:src="@drawable/ic_shutter_caf"
android:visibility="@{viewModel.manualCaptureButtonVisibility ? View.VISIBLE : View.GONE}"
app:layout_constraintBottom_toBottomOf="@+id/frameCameraPreview"
app:layout_constraintEnd_toEndOf="@id/guidelineEnd"
app:layout_constraintStart_toStartOf="@id/guidelineStart" />
<ProgressBar
android:id="@+id/progressBar"
android:layout_width="80dp"
android:layout_height="80dp"
android:layout_margin="16dp"
android:indeterminate="true"
android:indeterminateTint="@color/caf_white"
android:indeterminateTintMode="src_atop"
android:padding="8dp"
android:visibility="@{viewModel.loadingStatus ? View.VISIBLE : View.GONE}"
app:cafBackgroundColor="@{viewModel.feedbackStatusBackground}"
app:layout_constraintBottom_toBottomOf="@id/maskInfoContainer"
app:layout_constraintEnd_toEndOf="@id/maskInfoContainer"
app:layout_constraintStart_toStartOf="@id/maskInfoContainer"
app:layout_constraintTop_toTopOf="@id/maskInfoContainer"
app:layout_constraintVertical_bias="0.395" />
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>
Style (setStyle
)
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="windowProperties" parent="Theme.MaterialComponents.Light">
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
<item name="android:windowTranslucentStatus">true</item>
<item name="android:windowActivityTransitions">true</item>
<item name="android:colorControlActivated">#606060</item>
</style>
<style name="defaultStyle" parent="windowProperties">
<item name="colorPrimary">#34D690</item>
</style>
<style name="defaultButtonStyle" parent="Widget.MaterialComponents.Button">
<item name="android:layout_width">0dp</item>
<item name="android:layout_height">60dp</item>
<item name="android:gravity">center</item>
<item name="android:textColor">#FFFFFF</item>
<item name="android:textSize">18sp</item>
<item name="android:fontFamily">sans-serif</item>
<item name="android:textAllCaps">false</item>
</style>
<style name="transparentButton" parent="Widget.MaterialComponents.Button">
<item name="android:layout_width">0dp</item>
<item name="android:layout_height">60dp</item>
<item name="android:gravity">center</item>
<item name="android:textColor">#323232</item>
<item name="android:textSize">18sp</item>
<item name="android:textStyle">normal</item>
<item name="android:fontFamily">@font/roboto</item>
<item name="android:textAllCaps">false</item>
<item name="android:background">#00FFFFFF</item>
</style>
<style name="textPreview" parent="windowProperties">
<item name="android:textColor">#323232</item>
</style>
</resources>
Activity (setLayout
)
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:tools="http://schemas.android.com/tools"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<data>
<import type="android.view.View"/>
<variable
name="viewModel"
type="com.combateafraude.passivefaceliveness.controller.viewmodel.SDKViewModel" />
</data>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_height="match_parent"
android:layout_width="match_parent"
android:keepScreenOn="true">
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guidelineStart"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_percent="0.1" />
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guidelineEnd"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_percent="0.9" />
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guidelineTop"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
app:layout_constraintGuide_percent="0.05" />
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guidelineStatus"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
app:layout_constraintGuide_percent="0.7" />
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guidelineBottom"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
app:layout_constraintGuide_percent="0.97" />
<androidx.camera.view.PreviewView
android:id="@id/cameraImageView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:visibility="@{viewModel.cameraVisibility ? View.VISIBLE : View.GONE}"
>
</androidx.camera.view.PreviewView>
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:src="@{viewModel.previewBitMap}"
android:visibility="@{viewModel.previewVisibility ? View.VISIBLE : View.GONE}">
</ImageView>
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:adjustViewBounds="true"
android:contentDescription="@string/photo_mask_caf"
android:scaleType="fitXY"
android:src="@{context.getDrawable(viewModel.maskLayout)}"
android:visibility="@{viewModel.maskVisibility ? View.VISIBLE : View.GONE}" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="10dp"
android:adjustViewBounds="true"
android:contentDescription="@string/close_caf"
android:onClick="@{() -> viewModel.close()}"
android:src="@drawable/ic_back_caf"
app:layout_constraintStart_toStartOf="@id/guidelineStart"
app:layout_constraintTop_toTopOf="@id/guidelineTop" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="10dp"
android:adjustViewBounds="true"
android:contentDescription="@string/switch_camera"
android:onClick="@{() -> viewModel.switchCamera()}"
android:src="@drawable/ic_camera_switch"
android:visibility="@{viewModel.switchCameraButtonVisibility ? View.VISIBLE : View.GONE}"
app:layout_constraintEnd_toEndOf="@id/guidelineEnd"
app:layout_constraintTop_toTopOf="@id/guidelineTop" />
<com.google.android.material.floatingactionbutton.FloatingActionButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="16dp"
android:visibility="@{viewModel.manualCaptureButtonVisibility ? View.VISIBLE : View.GONE}"
android:onClick="@{() -> viewModel.takePhoto()}"
app:layout_constraintStart_toStartOf="@id/guidelineStart"
app:layout_constraintEnd_toEndOf="@id/guidelineEnd"
app:layout_constraintTop_toTopOf="@id/guidelineStatus"
android:contentDescription="@string/take_picture"
app:backgroundTint="?attr/colorPrimary"
app:tint="#FFF"
app:srcCompat="@drawable/ic_camera_caf"/>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:visibility="@{viewModel.statusVisibility ? View.VISIBLE : View.GONE}"
app:layout_constraintStart_toStartOf="@id/guidelineStart"
app:layout_constraintEnd_toEndOf="@id/guidelineEnd"
app:layout_constraintTop_toTopOf="@id/guidelineStatus">
<TextView
android:id="@+id/statusMessage"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:background="@drawable/bg_radius_caf"
android:gravity="center_horizontal"
android:lineSpacingExtra="7sp"
android:padding="10dp"
android:layout_marginTop="10dp"
android:textAlignment="center"
android:textColor="#606060"
android:textSize="15sp"
android:textStyle="bold"
android:text="@{viewModel.statusMessage}"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/triangle_caf"
android:rotation="270"
android:adjustViewBounds="true"
android:contentDescription="@string/nothing_caf"
app:layout_constraintEnd_toEndOf="@id/statusMessage"
app:layout_constraintStart_toStartOf="@id/statusMessage"
app:layout_constraintTop_toTopOf="@id/statusMessage"
app:layout_constraintBottom_toTopOf="@id/statusMessage" />
</androidx.constraintlayout.widget.ConstraintLayout>
<TextView
android:id="@+id/tvCurrentStepName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintBottom_toTopOf="@id/tvPreviousStepName"
app:layout_constraintStart_toStartOf="@id/guidelineStart"
app:layout_constraintEnd_toEndOf="@id/guidelineEnd"
android:layout_marginBottom="5dp"
android:textSize="18sp"
android:textColor="#ffffff"
android:letterSpacing="0.06"
android:text="@{viewModel.currentStepName}"
android:gravity="center_horizontal" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:adjustViewBounds="true"
android:visibility="@{viewModel.currentStepDone ? View.VISIBLE : View.GONE}"
android:contentDescription="@string/check_caf"
app:layout_constraintTop_toTopOf="@id/tvCurrentStepName"
app:layout_constraintBottom_toBottomOf="@id/tvCurrentStepName"
app:layout_constraintEnd_toStartOf="@id/tvCurrentStepName"
android:layout_marginEnd="8dp"
android:src="@drawable/ic_check_caf" />
<TextView
android:id="@+id/tvPreviousStepName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintStart_toStartOf="@id/guidelineStart"
app:layout_constraintEnd_toEndOf="@id/guidelineEnd"
app:layout_constraintBottom_toBottomOf="@id/guidelineBottom"
android:textSize="16sp"
android:textColor="#66FFFFFF"
android:letterSpacing="0.06"
android:text="@{viewModel.previousStepName}"
android:gravity="center_horizontal" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:adjustViewBounds="true"
android:visibility="@{viewModel.previousStepDone ? View.VISIBLE : View.GONE}"
android:contentDescription="@string/check_caf"
app:layout_constraintTop_toTopOf="@id/tvPreviousStepName"
app:layout_constraintBottom_toBottomOf="@id/tvPreviousStepName"
app:layout_constraintEnd_toStartOf="@id/tvPreviousStepName"
android:layout_marginEnd="8dp"
android:alpha="0.4"
android:src="@drawable/ic_check_caf" />
<ProgressBar
android:id="@+id/progressBar"
android:layout_width="64dp"
android:layout_height="64dp"
android:indeterminate="true"
android:indeterminateTint="?attr/colorPrimary"
android:indeterminateTintMode="src_atop"
android:visibility="@{viewModel.loadingStatus ? View.VISIBLE : View.GONE}"
app:layout_constraintBottom_toBottomOf="@id/guidelineBottom"
app:layout_constraintEnd_toEndOf="@id/guidelineEnd"
app:layout_constraintStart_toStartOf="@id/guidelineStart"
app:layout_constraintTop_toTopOf="@id/guidelineTop"
app:layout_constraintVertical_bias="0.45" />
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>
Style (setStyle
)
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="windowProperties" parent="Theme.MaterialComponents.Light">
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
<item name="android:windowTranslucentStatus">true</item>
<item name="android:windowActivityTransitions">true</item>
<item name="android:colorControlActivated">#606060</item>
</style>
<style name="defaultStyle" parent="windowProperties">
<item name="colorPrimary">#4CD964</item>
</style>
<style name="defaultButtonStyle" parent="Widget.MaterialComponents.Button">
<item name="android:layout_width">0dp</item>
<item name="android:layout_height">60dp</item>
<item name="android:gravity">center</item>
<item name="android:textColor">#FFFFFF</item>
<item name="android:textSize">18sp</item>
<item name="android:fontFamily">sans-serif</item>
<item name="android:textAllCaps">false</item>
</style>
<style name="transparentButton" parent="Widget.MaterialComponents.Button">
<item name="android:layout_width">0dp</item>
<item name="android:layout_height">60dp</item>
<item name="android:gravity">center</item>
<item name="android:textColor">#323232</item>
<item name="android:textSize">18sp</item>
<item name="android:textStyle">normal</item>
<item name="android:fontFamily">@font/roboto</item>
<item name="android:textAllCaps">false</item>
<item name="android:background">#00FFFFFF</item>
</style>
<style name="textPreview" parent="windowProperties">
<item name="android:textColor">#323232</item>
</style>
</resources>
Mask (setMask
)
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="375dp"
android:height="667dp"
android:viewportWidth="375"
android:viewportHeight="667">
<path
android:pathData="M375,0V667H0V0H375ZM187.5,130C84.91,130 76,208 76,282.5C76,357 131.133,455 187.5,455C243.867,455 299,357 299,282.5C299,208 290.09,130 187.5,130Z"
android:strokeAlpha="0.35"
android:fillColor="#000000"
android:fillType="evenOdd"
android:fillAlpha="0.35"/>
<!--
The color of the mask can be changed by the android:fillColor attribute of the element below.
The default colors are: #22CB7B (green), #E74C3C (red), #ffffff (white)
-->
<path
android:pathData="M187.5,131.5C186.639,131.5 185.785,131.506 184.937,131.517C184.109,131.527 183.429,130.865 183.418,130.036C183.407,129.208 184.07,128.528 184.898,128.517C185.759,128.506 186.626,128.5 187.5,128.5C188.374,128.5 189.241,128.506 190.102,128.517C190.93,128.528 191.593,129.208 191.582,130.036C191.571,130.865 190.891,131.527 190.063,131.517C189.215,131.506 188.361,131.5 187.5,131.5ZM179.382,130.163C179.424,130.99 178.787,131.695 177.96,131.738C176.246,131.825 174.561,131.937 172.905,132.071C172.08,132.139 171.356,131.524 171.289,130.698C171.221,129.872 171.836,129.149 172.662,129.081C174.349,128.944 176.063,128.831 177.807,128.742C178.634,128.699 179.339,129.336 179.382,130.163ZM195.618,130.163C195.661,129.336 196.366,128.699 197.193,128.742C198.937,128.831 200.652,128.944 202.338,129.081C203.164,129.149 203.779,129.872 203.711,130.698C203.644,131.524 202.92,132.139 202.095,132.071C200.439,131.937 198.754,131.825 197.04,131.738C196.213,131.695 195.576,130.99 195.618,130.163ZM167.23,131.12C167.335,131.941 166.754,132.693 165.932,132.798C164.266,133.011 162.631,133.249 161.027,133.513C160.209,133.647 159.438,133.093 159.303,132.275C159.169,131.458 159.723,130.686 160.541,130.552C162.18,130.283 163.851,130.039 165.552,129.822C166.374,129.717 167.125,130.298 167.23,131.12ZM207.77,131.12C207.875,130.298 208.626,129.717 209.448,129.822C211.149,130.039 212.82,130.283 214.459,130.552C215.277,130.686 215.831,131.458 215.697,132.275C215.562,133.093 214.791,133.647 213.973,133.513C212.369,133.249 210.734,133.011 209.068,132.798C208.246,132.693 207.665,131.941 207.77,131.12ZM155.285,133.046C155.464,133.855 154.954,134.656 154.145,134.835C152.481,135.203 150.855,135.6 149.263,136.026C148.463,136.24 147.641,135.764 147.427,134.964C147.213,134.164 147.688,133.341 148.489,133.128C150.123,132.691 151.792,132.283 153.496,131.906C154.305,131.727 155.106,132.237 155.285,133.046ZM219.715,133.046C219.894,132.237 220.695,131.727 221.504,131.906C223.209,132.283 224.878,132.691 226.511,133.128C227.312,133.341 227.787,134.164 227.573,134.964C227.359,135.764 226.537,136.24 225.737,136.026C224.145,135.6 222.519,135.203 220.855,134.835C220.046,134.656 219.536,133.855 219.715,133.046ZM143.521,136.143C143.787,136.928 143.367,137.779 142.582,138.045C140.987,138.586 139.432,139.158 137.915,139.759C137.145,140.065 136.273,139.688 135.968,138.918C135.663,138.148 136.039,137.276 136.809,136.971C138.374,136.35 139.977,135.761 141.619,135.204C142.403,134.938 143.255,135.358 143.521,136.143ZM231.479,136.143C231.745,135.358 232.597,134.938 233.381,135.204C235.023,135.761 236.626,136.35 238.191,136.971C238.961,137.276 239.337,138.148 239.032,138.918C238.727,139.688 237.855,140.065 237.085,139.759C235.568,139.158 234.013,138.586 232.418,138.045C231.634,137.779 231.213,136.928 231.479,136.143ZM132.232,140.564C132.596,141.309 132.287,142.207 131.543,142.57C130.038,143.304 128.576,144.072 127.155,144.87C126.433,145.276 125.518,145.02 125.112,144.298C124.706,143.576 124.963,142.661 125.685,142.255C127.157,141.428 128.671,140.634 130.226,139.874C130.971,139.511 131.869,139.82 132.232,140.564ZM242.768,140.564C243.131,139.82 244.029,139.511 244.774,139.874C246.329,140.634 247.843,141.428 249.315,142.255C250.037,142.661 250.294,143.576 249.888,144.298C249.482,145.02 248.567,145.276 247.845,144.87C246.424,144.072 244.962,143.304 243.458,142.57C242.713,142.207 242.404,141.309 242.768,140.564ZM121.635,146.45C122.101,147.135 121.923,148.068 121.238,148.534C119.859,149.472 118.523,150.444 117.229,151.449C116.575,151.957 115.633,151.838 115.125,151.184C114.616,150.529 114.735,149.587 115.389,149.079C116.733,148.036 118.12,147.027 119.551,146.053C120.236,145.587 121.169,145.765 121.635,146.45ZM253.365,146.45C253.831,145.765 254.764,145.587 255.449,146.053C256.88,147.027 258.267,148.036 259.611,149.079C260.265,149.587 260.384,150.529 259.875,151.184C259.367,151.838 258.425,151.957 257.771,151.449C256.477,150.444 255.141,149.472 253.762,148.534C253.077,148.068 252.899,147.135 253.365,146.45ZM112.011,153.831C112.575,154.438 112.541,155.387 111.934,155.951C110.718,157.083 109.544,158.248 108.41,159.445C107.841,160.046 106.891,160.072 106.29,159.503C105.688,158.933 105.662,157.984 106.232,157.382C107.408,156.14 108.628,154.93 109.891,153.755C110.497,153.191 111.447,153.225 112.011,153.831ZM262.989,153.831C263.553,153.225 264.503,153.191 265.109,153.755C266.372,154.93 267.592,156.14 268.768,157.382C269.338,157.983 269.312,158.933 268.71,159.503C268.109,160.072 267.159,160.046 266.59,159.445C265.456,158.248 264.282,157.083 263.066,155.951C262.459,155.387 262.425,154.438 262.989,153.831ZM271.386,162.588C272.035,162.072 272.978,162.18 273.494,162.828C274.563,164.172 275.59,165.547 276.577,166.951C277.053,167.628 276.89,168.564 276.212,169.041C275.534,169.517 274.599,169.354 274.122,168.676C273.169,167.319 272.177,165.992 271.146,164.695C270.63,164.047 270.738,163.103 271.386,162.588ZM103.614,162.588C104.262,163.103 104.37,164.047 103.854,164.695C102.823,165.992 101.831,167.319 100.878,168.676C100.401,169.354 99.466,169.517 98.788,169.041C98.11,168.564 97.947,167.628 98.423,166.951C99.41,165.547 100.437,164.172 101.506,162.828C102.022,162.18 102.965,162.072 103.614,162.588ZM278.425,172.471C279.137,172.049 280.057,172.284 280.48,172.997C281.35,174.467 282.184,175.964 282.982,177.486C283.366,178.22 283.083,179.126 282.35,179.511C281.616,179.896 280.709,179.613 280.325,178.879C279.55,177.402 278.742,175.95 277.898,174.526C277.476,173.813 277.712,172.893 278.425,172.471ZM96.575,172.471C97.288,172.893 97.524,173.813 97.102,174.526C96.258,175.95 95.45,177.402 94.675,178.879C94.291,179.613 93.384,179.896 92.65,179.511C91.917,179.126 91.634,178.22 92.018,177.486C92.816,175.964 93.65,174.467 94.52,172.997C94.943,172.284 95.863,172.049 96.575,172.471ZM284.119,183.188C284.877,182.853 285.762,183.196 286.097,183.954C286.785,185.51 287.441,187.089 288.065,188.688C288.367,189.46 287.986,190.33 287.214,190.631C286.443,190.933 285.573,190.551 285.271,189.78C284.662,188.22 284.023,186.682 283.353,185.166C283.018,184.409 283.361,183.523 284.119,183.188ZM90.881,183.188C91.639,183.523 91.982,184.409 91.647,185.166C90.977,186.682 90.338,188.22 89.729,189.78C89.427,190.551 88.557,190.933 87.786,190.631C87.014,190.33 86.633,189.46 86.935,188.688C87.559,187.089 88.215,185.51 88.903,183.954C89.238,183.196 90.123,182.853 90.881,183.188ZM86.409,194.474C87.196,194.733 87.625,195.58 87.367,196.367C86.85,197.943 86.358,199.537 85.892,201.149C85.662,201.945 84.83,202.404 84.035,202.174C83.239,201.944 82.78,201.112 83.01,200.316C83.486,198.671 83.988,197.043 84.516,195.432C84.775,194.645 85.622,194.216 86.409,194.474ZM288.591,194.474C289.378,194.216 290.225,194.645 290.484,195.432C291.012,197.043 291.514,198.671 291.99,200.316C292.22,201.112 291.761,201.944 290.965,202.174C290.17,202.404 289.338,201.945 289.108,201.149C288.642,199.537 288.151,197.943 287.633,196.367C287.375,195.58 287.804,194.733 288.591,194.474ZM82.991,206.125C83.797,206.319 84.292,207.13 84.098,207.935C83.709,209.549 83.342,211.178 82.996,212.821C82.825,213.632 82.03,214.151 81.219,213.98C80.408,213.809 79.89,213.013 80.06,212.203C80.412,210.533 80.785,208.876 81.182,207.232C81.376,206.427 82.186,205.931 82.991,206.125ZM292.009,206.125C292.814,205.931 293.624,206.427 293.818,207.232C294.214,208.876 294.588,210.533 294.94,212.203C295.11,213.013 294.592,213.809 293.781,213.98C292.97,214.151 292.175,213.632 292.004,212.821C291.658,211.178 291.291,209.549 290.902,207.935C290.708,207.13 291.203,206.319 292.009,206.125ZM80.452,217.993C81.269,218.134 81.816,218.91 81.674,219.726C81.391,221.368 81.125,223.02 80.877,224.684C80.754,225.503 79.991,226.068 79.172,225.946C78.352,225.823 77.787,225.06 77.91,224.241C78.161,222.555 78.43,220.88 78.718,219.215C78.86,218.399 79.636,217.851 80.452,217.993ZM294.548,217.993C295.364,217.851 296.14,218.399 296.282,219.215C296.57,220.88 296.839,222.555 297.091,224.241C297.213,225.06 296.648,225.823 295.828,225.946C295.009,226.068 294.246,225.503 294.123,224.684C293.875,223.02 293.61,221.368 293.326,219.726C293.184,218.91 293.731,218.134 294.548,217.993ZM78.63,229.994C79.452,230.092 80.039,230.839 79.94,231.662C79.742,233.321 79.558,234.988 79.389,236.664C79.306,237.488 78.57,238.089 77.746,238.005C76.922,237.922 76.321,237.186 76.404,236.362C76.575,234.669 76.761,232.983 76.962,231.305C77.06,230.482 77.807,229.895 78.63,229.994ZM296.371,229.994C297.193,229.895 297.94,230.482 298.038,231.305C298.239,232.983 298.425,234.669 298.596,236.362C298.679,237.186 298.078,237.922 297.254,238.005C296.43,238.089 295.694,237.488 295.611,236.664C295.442,234.988 295.258,233.321 295.059,231.662C294.961,230.839 295.548,230.092 296.371,229.994ZM77.384,242.073C78.21,242.137 78.827,242.859 78.763,243.685C78.633,245.356 78.516,247.032 78.409,248.714C78.357,249.54 77.644,250.168 76.818,250.116C75.991,250.064 75.363,249.351 75.415,248.524C75.522,246.829 75.641,245.138 75.772,243.452C75.837,242.626 76.558,242.009 77.384,242.073ZM297.616,242.073C298.442,242.009 299.163,242.626 299.228,243.452C299.359,245.138 299.478,246.829 299.585,248.524C299.637,249.351 299.009,250.064 298.182,250.116C297.356,250.168 296.643,249.54 296.591,248.714C296.484,247.032 296.367,245.356 296.237,243.685C296.172,242.859 296.79,242.138 297.616,242.073ZM76.598,254.194C77.426,254.231 78.066,254.932 78.029,255.76C77.953,257.436 77.887,259.116 77.83,260.799C77.801,261.627 77.107,262.275 76.28,262.247C75.451,262.219 74.803,261.525 74.831,260.697C74.889,259.004 74.955,257.313 75.032,255.624C75.069,254.797 75.771,254.156 76.598,254.194ZM298.402,254.194C299.229,254.156 299.931,254.797 299.968,255.624C300.044,257.313 300.111,259.004 300.169,260.697C300.197,261.525 299.548,262.219 298.721,262.247C297.893,262.275 297.199,261.627 297.17,260.799C297.113,259.116 297.047,257.436 296.971,255.76C296.934,254.932 297.574,254.231 298.402,254.194ZM76.17,266.329C76.998,266.346 77.655,267.031 77.638,267.86C77.604,269.541 77.577,271.223 77.556,272.906C77.546,273.735 76.866,274.398 76.037,274.388C75.209,274.377 74.546,273.698 74.556,272.869C74.577,271.179 74.604,269.488 74.639,267.798C74.656,266.97 75.341,266.312 76.17,266.329ZM298.831,266.329C299.659,266.312 300.344,266.97 300.361,267.798C300.396,269.488 300.423,271.179 300.444,272.869C300.454,273.698 299.791,274.378 298.962,274.388C298.134,274.398 297.454,273.735 297.444,272.906C297.423,271.224 297.396,269.541 297.362,267.86C297.345,267.031 298.002,266.346 298.831,266.329ZM76.008,278.472C76.836,278.474 77.506,279.148 77.504,279.976C77.501,280.818 77.5,281.659 77.5,282.5C77.5,283.337 77.507,284.177 77.521,285.02C77.535,285.848 76.874,286.531 76.046,286.544C75.218,286.558 74.535,285.898 74.521,285.069C74.507,284.21 74.5,283.354 74.5,282.5C74.5,281.656 74.501,280.812 74.504,279.968C74.506,279.139 75.179,278.47 76.008,278.472ZM298.992,278.472C299.821,278.47 300.494,279.139 300.496,279.968C300.499,280.812 300.5,281.656 300.5,282.5C300.5,283.354 300.493,284.21 300.479,285.069C300.465,285.898 299.782,286.558 298.954,286.544C298.126,286.531 297.465,285.848 297.479,285.02C297.493,284.177 297.5,283.337 297.5,282.5C297.5,281.659 297.499,280.818 297.496,279.976C297.494,279.148 298.164,278.474 298.992,278.472ZM298.791,290.71C299.618,290.761 300.247,291.472 300.197,292.299C300.093,294.01 299.963,295.73 299.807,297.458C299.733,298.283 299.003,298.892 298.178,298.817C297.353,298.743 296.745,298.014 296.819,297.188C296.973,295.489 297.101,293.798 297.203,292.117C297.253,291.29 297.964,290.66 298.791,290.71ZM76.209,290.711C77.036,290.66 77.747,291.29 77.797,292.117C77.899,293.798 78.027,295.489 78.181,297.188C78.255,298.014 77.647,298.743 76.822,298.817C75.997,298.892 75.267,298.283 75.193,297.458C75.037,295.73 74.907,294.01 74.803,292.299C74.753,291.472 75.382,290.761 76.209,290.711ZM297.722,302.962C298.544,303.068 299.124,303.82 299.017,304.642C298.798,306.337 298.556,308.038 298.29,309.743C298.162,310.562 297.396,311.122 296.577,310.994C295.758,310.867 295.198,310.1 295.326,309.281C295.587,307.602 295.826,305.926 296.042,304.257C296.148,303.436 296.9,302.856 297.722,302.962ZM77.278,302.962C78.1,302.856 78.852,303.436 78.958,304.257C79.174,305.926 79.413,307.602 79.674,309.281C79.802,310.1 79.242,310.867 78.423,310.994C77.604,311.122 76.838,310.562 76.71,309.743C76.445,308.038 76.202,306.337 75.983,304.642C75.877,303.82 76.456,303.068 77.278,302.962ZM295.863,315.101C296.677,315.257 297.21,316.043 297.055,316.857C296.733,318.538 296.39,320.223 296.026,321.908C295.851,322.718 295.052,323.233 294.243,323.058C293.433,322.883 292.918,322.085 293.093,321.275C293.452,319.612 293.791,317.951 294.108,316.293C294.264,315.479 295.05,314.946 295.863,315.101ZM79.137,315.101C79.95,314.946 80.736,315.479 80.892,316.293C81.209,317.951 81.548,319.612 81.907,321.275C82.082,322.085 81.567,322.883 80.757,323.058C79.948,323.233 79.149,322.718 78.975,321.908C78.61,320.223 78.267,318.538 77.945,316.857C77.79,316.043 78.323,315.257 79.137,315.101ZM81.703,327.12C82.507,326.919 83.321,327.408 83.522,328.212C83.932,329.855 84.361,331.498 84.809,333.14C85.027,333.939 84.556,334.764 83.757,334.982C82.958,335.2 82.133,334.729 81.915,333.93C81.461,332.267 81.026,330.603 80.611,328.938C80.41,328.134 80.899,327.32 81.703,327.12ZM293.297,327.12C294.101,327.32 294.59,328.134 294.389,328.938C293.974,330.603 293.539,332.267 293.085,333.93C292.867,334.729 292.042,335.2 291.243,334.982C290.444,334.764 289.973,333.939 290.191,333.14C290.639,331.498 291.068,329.855 291.478,328.212C291.679,327.408 292.493,326.919 293.297,327.12ZM290.085,338.985C290.877,339.227 291.323,340.065 291.081,340.858C290.581,342.497 290.062,344.134 289.525,345.766C289.267,346.553 288.419,346.982 287.632,346.723C286.845,346.465 286.417,345.617 286.675,344.83C287.205,343.217 287.718,341.601 288.212,339.981C288.454,339.189 289.293,338.743 290.085,338.985ZM84.915,338.985C85.707,338.743 86.546,339.189 86.788,339.981C87.282,341.601 87.795,343.217 88.325,344.83C88.583,345.617 88.155,346.465 87.368,346.723C86.581,346.982 85.733,346.553 85.475,345.766C84.938,344.134 84.419,342.497 83.919,340.858C83.677,340.065 84.123,339.227 84.915,338.985ZM88.727,350.666C89.506,350.384 90.366,350.788 90.647,351.567C91.223,353.163 91.815,354.754 92.424,356.338C92.721,357.111 92.335,357.979 91.562,358.276C90.788,358.573 89.921,358.187 89.623,357.414C89.007,355.811 88.408,354.201 87.825,352.586C87.544,351.807 87.947,350.947 88.727,350.666ZM286.273,350.666C287.053,350.947 287.456,351.807 287.175,352.586C286.592,354.201 285.993,355.811 285.377,357.414C285.079,358.187 284.212,358.573 283.438,358.276C282.665,357.979 282.279,357.111 282.576,356.338C283.185,354.754 283.777,353.163 284.353,351.567C284.634,350.788 285.494,350.385 286.273,350.666ZM93.112,362.146C93.877,361.827 94.755,362.188 95.074,362.952C95.728,364.52 96.398,366.079 97.083,367.63C97.418,368.387 97.075,369.273 96.317,369.608C95.559,369.942 94.673,369.599 94.339,368.842C93.646,367.272 92.968,365.694 92.306,364.108C91.987,363.343 92.348,362.465 93.112,362.146ZM281.888,362.146C282.652,362.465 283.013,363.343 282.694,364.108C282.032,365.694 281.354,367.272 280.661,368.842C280.327,369.599 279.441,369.942 278.683,369.608C277.925,369.273 277.582,368.387 277.917,367.63C278.602,366.079 279.272,364.52 279.926,362.952C280.245,362.188 281.123,361.827 281.888,362.146ZM98.057,373.398C98.804,373.041 99.7,373.358 100.056,374.106C100.788,375.641 101.534,377.166 102.295,378.678C102.667,379.418 102.369,380.32 101.629,380.692C100.889,381.064 99.987,380.766 99.615,380.026C98.845,378.494 98.089,376.951 97.348,375.397C96.992,374.649 97.309,373.754 98.057,373.398ZM276.943,373.398C277.691,373.754 278.008,374.65 277.652,375.397C276.911,376.951 276.155,378.495 275.385,380.026C275.013,380.766 274.111,381.064 273.371,380.692C272.631,380.32 272.333,379.418 272.705,378.678C273.465,377.166 274.212,375.641 274.944,374.106C275.3,373.358 276.196,373.041 276.943,373.398ZM103.557,384.389C104.286,383.994 105.196,384.265 105.59,384.994C106.399,386.488 107.221,387.968 108.057,389.434C108.467,390.154 108.216,391.07 107.497,391.48C106.777,391.89 105.861,391.639 105.451,390.92C104.604,389.435 103.771,387.935 102.952,386.422C102.558,385.693 102.829,384.783 103.557,384.389ZM271.443,384.389C272.171,384.783 272.442,385.693 272.048,386.422C271.229,387.935 270.396,389.435 269.549,390.92C269.139,391.639 268.223,391.89 267.503,391.48C266.784,391.07 266.533,390.154 266.943,389.434C267.779,387.968 268.601,386.488 269.41,384.994C269.804,384.265 270.714,383.994 271.443,384.389ZM109.619,395.069C110.325,394.636 111.249,394.858 111.682,395.564C112.575,397.018 113.48,398.455 114.398,399.874C114.848,400.569 114.649,401.498 113.953,401.948C113.258,402.398 112.329,402.199 111.879,401.503C110.948,400.064 110.03,398.607 109.125,397.132C108.692,396.426 108.913,395.503 109.619,395.069ZM265.381,395.07C266.087,395.503 266.308,396.426 265.875,397.132C264.97,398.607 264.052,400.064 263.121,401.503C262.671,402.199 261.742,402.398 261.047,401.948C260.351,401.498 260.152,400.569 260.602,399.874C261.52,398.455 262.425,397.018 263.318,395.564C263.751,394.858 264.675,394.636 265.381,395.07ZM116.279,405.409C116.958,404.935 117.893,405.101 118.367,405.781C119.343,407.178 120.331,408.554 121.33,409.907C121.822,410.574 121.681,411.513 121.015,412.005C120.348,412.497 119.409,412.356 118.917,411.69C117.901,410.315 116.898,408.917 115.907,407.498C115.433,406.819 115.599,405.884 116.279,405.409ZM258.721,405.409C259.401,405.884 259.567,406.819 259.093,407.498C258.102,408.917 257.098,410.315 256.083,411.69C255.591,412.356 254.652,412.497 253.985,412.005C253.319,411.513 253.178,410.574 253.67,409.907C254.669,408.554 255.657,407.178 256.633,405.781C257.107,405.101 258.042,404.935 258.721,405.409ZM123.557,415.311C124.203,414.792 125.147,414.896 125.666,415.542C126.73,416.87 127.806,418.17 128.892,419.444C129.43,420.074 129.355,421.021 128.725,421.558C128.095,422.096 127.148,422.021 126.61,421.391C125.503,420.094 124.408,418.77 123.325,417.419C122.807,416.773 122.911,415.829 123.557,415.311ZM251.443,415.311C252.089,415.829 252.193,416.773 251.675,417.419C250.592,418.77 249.497,420.094 248.39,421.391C247.852,422.021 246.905,422.096 246.275,421.558C245.645,421.021 245.57,420.074 246.108,419.444C247.194,418.17 248.27,416.87 249.334,415.542C249.853,414.896 250.797,414.792 251.443,415.311ZM131.504,424.67C132.108,424.104 133.058,424.135 133.624,424.739C134.79,425.984 135.967,427.196 137.153,428.374C137.741,428.958 137.745,429.907 137.161,430.495C136.577,431.083 135.628,431.087 135.04,430.503C133.827,429.299 132.625,428.061 131.435,426.79C130.868,426.186 130.899,425.237 131.504,424.67ZM243.496,424.67C244.101,425.237 244.132,426.186 243.565,426.79C242.375,428.061 241.173,429.299 239.96,430.503C239.372,431.087 238.423,431.083 237.839,430.495C237.255,429.907 237.259,428.958 237.847,428.374C239.033,427.196 240.21,425.984 241.376,424.739C241.942,424.135 242.892,424.104 243.496,424.67ZM140.192,433.347C140.742,432.727 141.691,432.671 142.31,433.221C143.588,434.355 144.876,435.449 146.172,436.5C146.815,437.022 146.914,437.967 146.392,438.61C145.87,439.254 144.925,439.352 144.282,438.83C142.95,437.75 141.629,436.627 140.319,435.464C139.699,434.914 139.643,433.966 140.192,433.347ZM234.808,433.347C235.357,433.966 235.301,434.914 234.682,435.464C233.371,436.627 232.05,437.75 230.718,438.83C230.075,439.352 229.13,439.254 228.608,438.61C228.086,437.967 228.185,437.022 228.828,436.5C230.124,435.449 231.412,434.355 232.69,433.221C233.309,432.671 234.258,432.727 234.808,433.347ZM149.708,441.121C150.184,440.443 151.119,440.279 151.797,440.755C153.192,441.735 154.595,442.663 156.005,443.539C156.708,443.976 156.924,444.901 156.487,445.605C156.05,446.309 155.125,446.525 154.421,446.087C152.962,445.181 151.512,444.221 150.073,443.211C149.395,442.735 149.232,441.799 149.708,441.121ZM225.292,441.121C225.768,441.799 225.605,442.735 224.927,443.211C223.488,444.221 222.038,445.181 220.579,446.087C219.875,446.525 218.95,446.309 218.513,445.605C218.076,444.901 218.292,443.976 218.995,443.539C220.405,442.663 221.808,441.735 223.203,440.755C223.881,440.279 224.816,440.443 225.292,441.121ZM160.108,447.647C160.481,446.907 161.383,446.61 162.123,446.983C163.636,447.747 165.155,448.448 166.678,449.084C167.443,449.403 167.804,450.281 167.485,451.046C167.166,451.81 166.287,452.171 165.523,451.852C163.93,451.188 162.346,450.456 160.771,449.662C160.031,449.289 159.734,448.386 160.108,447.647ZM214.892,447.647C215.266,448.386 214.969,449.288 214.229,449.662C212.654,450.456 211.07,451.188 209.477,451.852C208.713,452.171 207.834,451.81 207.515,451.046C207.196,450.281 207.557,449.403 208.322,449.084C209.845,448.448 211.364,447.747 212.878,446.983C213.617,446.61 214.519,446.907 214.892,447.647ZM171.419,452.44C171.649,451.645 172.481,451.186 173.277,451.416C174.888,451.882 176.502,452.273 178.118,452.585C178.931,452.742 179.463,453.529 179.306,454.342C179.149,455.156 178.362,455.688 177.549,455.53C175.841,455.2 174.138,454.788 172.443,454.298C171.648,454.068 171.189,453.236 171.419,452.44ZM203.581,452.44C203.811,453.236 203.352,454.068 202.557,454.298C200.862,454.788 199.159,455.2 197.451,455.53C196.638,455.688 195.851,455.156 195.694,454.342C195.537,453.529 196.069,452.742 196.882,452.585C198.498,452.273 200.112,451.882 201.723,451.416C202.519,451.186 203.351,451.645 203.581,452.44ZM183.444,454.855C183.487,454.028 184.193,453.392 185.02,453.435C185.847,453.478 186.673,453.5 187.5,453.5C188.327,453.5 189.153,453.478 189.98,453.435C190.807,453.392 191.513,454.028 191.556,454.855C191.599,455.682 190.963,456.388 190.136,456.431C189.258,456.477 188.379,456.5 187.5,456.5C186.621,456.5 185.742,456.477 184.864,456.431C184.037,456.388 183.401,455.682 183.444,454.855Z"
android:fillColor="#22CB7B"
android:fillType="evenOdd"/>
</vector>
Activity (setLayout
)
<?xml version="1.0" encoding="utf-8"?>
<layout>
<data>
<import type="android.view.View"/>
<variable
name="viewModel"
type="com.combateafraude.faceauthenticator.controller.viewmodel.SDKViewModel" />
</data>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_height="match_parent"
android:layout_width="match_parent"
android:keepScreenOn="true">
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guidelineStart"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_percent="0.1" />
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guidelineEnd"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_percent="0.9" />
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guidelineTop"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
app:layout_constraintGuide_percent="0.05" />
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guidelineStatus"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
app:layout_constraintGuide_percent="0.7" />
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guidelineBottom"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
app:layout_constraintGuide_percent="0.97" />
<androidx.camera.view.PreviewView
android:id="@id/cameraImageView"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:adjustViewBounds="true"
android:contentDescription="@string/photo_mask_caf"
android:scaleType="fitXY"
android:src="@{context.getDrawable(viewModel.maskLayout)}" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="10dp"
android:adjustViewBounds="true"
android:contentDescription="@string/close_caf"
android:onClick="@{() -> viewModel.close()}"
android:src="@drawable/ic_back_caf"
app:layout_constraintStart_toStartOf="@id/guidelineStart"
app:layout_constraintTop_toTopOf="@id/guidelineTop" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="10dp"
android:adjustViewBounds="true"
android:contentDescription="@string/switch_camera"
android:onClick="@{() -> viewModel.switchCamera()}"
android:src="@drawable/ic_camera_switch"
android:visibility="@{viewModel.switchCameraButtonVisibility ? View.VISIBLE : View.GONE}"
app:layout_constraintEnd_toEndOf="@id/guidelineEnd"
app:layout_constraintTop_toTopOf="@id/guidelineTop" />
<com.google.android.material.floatingactionbutton.FloatingActionButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="16dp"
android:visibility="@{viewModel.manualCaptureButtonVisibility ? View.VISIBLE : View.GONE}"
android:onClick="@{() -> viewModel.takePhoto()}"
app:layout_constraintStart_toStartOf="@id/guidelineStart"
app:layout_constraintEnd_toEndOf="@id/guidelineEnd"
app:layout_constraintTop_toTopOf="@id/guidelineStatus"
android:contentDescription="@string/take_picture"
app:backgroundTint="?attr/colorPrimary"
app:tint="#FFF"
app:srcCompat="@drawable/ic_camera_caf"/>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:visibility="@{viewModel.statusVisibility ? View.VISIBLE : View.GONE}"
app:layout_constraintStart_toStartOf="@id/guidelineStart"
app:layout_constraintEnd_toEndOf="@id/guidelineEnd"
app:layout_constraintTop_toTopOf="@id/guidelineStatus">
<TextView
android:id="@+id/statusMessage"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:background="@drawable/bg_radius_caf"
android:gravity="center_horizontal"
android:lineSpacingExtra="7sp"
android:padding="10dp"
android:layout_marginTop="10dp"
android:textAlignment="center"
android:textColor="#606060"
android:textSize="15sp"
android:textStyle="bold"
android:text="@{viewModel.statusMessage}"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/triangle_caf"
android:rotation="270"
android:adjustViewBounds="true"
android:contentDescription="@string/nothing_caf"
app:layout_constraintEnd_toEndOf="@id/statusMessage"
app:layout_constraintStart_toStartOf="@id/statusMessage"
app:layout_constraintTop_toTopOf="@id/statusMessage"
app:layout_constraintBottom_toTopOf="@id/statusMessage" />
</androidx.constraintlayout.widget.ConstraintLayout>
<TextView
android:id="@+id/tvCurrentStepName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintBottom_toTopOf="@id/tvPreviousStepName"
app:layout_constraintStart_toStartOf="@id/guidelineStart"
app:layout_constraintEnd_toEndOf="@id/guidelineEnd"
android:layout_marginBottom="5dp"
android:textSize="18sp"
android:textColor="#ffffff"
android:letterSpacing="0.06"
android:text="@{viewModel.currentStepName}"
android:gravity="center_horizontal" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:adjustViewBounds="true"
android:visibility="@{viewModel.currentStepDone ? View.VISIBLE : View.GONE}"
android:contentDescription="@string/check_caf"
app:layout_constraintTop_toTopOf="@id/tvCurrentStepName"
app:layout_constraintBottom_toBottomOf="@id/tvCurrentStepName"
app:layout_constraintEnd_toStartOf="@id/tvCurrentStepName"
android:layout_marginEnd="8dp"
android:src="@drawable/ic_check_caf" />
<TextView
android:id="@+id/tvPreviousStepName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintStart_toStartOf="@id/guidelineStart"
app:layout_constraintEnd_toEndOf="@id/guidelineEnd"
app:layout_constraintBottom_toBottomOf="@id/guidelineBottom"
android:textSize="16sp"
android:textColor="#66FFFFFF"
android:letterSpacing="0.06"
android:text="@{viewModel.previousStepName}"
android:gravity="center_horizontal" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:adjustViewBounds="true"
android:visibility="@{viewModel.previousStepDone ? View.VISIBLE : View.GONE}"
android:contentDescription="@string/check_caf"
app:layout_constraintTop_toTopOf="@id/tvPreviousStepName"
app:layout_constraintBottom_toBottomOf="@id/tvPreviousStepName"
app:layout_constraintEnd_toStartOf="@id/tvPreviousStepName"
android:layout_marginEnd="8dp"
android:alpha="0.4"
android:src="@drawable/ic_check_caf" />
<ProgressBar
android:layout_width="64dp"
android:layout_height="64dp"
android:indeterminate="true"
android:indeterminateTint="?attr/colorPrimary"
android:indeterminateTintMode="src_atop"
android:visibility="@{viewModel.loadingStatus ? View.VISIBLE : View.GONE}"
app:layout_constraintVertical_bias="0.45"
app:layout_constraintBottom_toBottomOf="@id/guidelineBottom"
app:layout_constraintTop_toTopOf="@id/guidelineTop"
app:layout_constraintStart_toStartOf="@id/guidelineStart"
app:layout_constraintEnd_toEndOf="@id/guidelineEnd" />
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>
Style (setStyle
)
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="windowProperties" parent="Theme.MaterialComponents.Light">
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
<item name="android:windowTranslucentStatus">true</item>
<item name="android:windowActivityTransitions">true</item>
<item name="android:colorControlActivated">#606060</item>
</style>
<style name="defaultStyle" parent="windowProperties">
<item name="colorPrimary">#4CD964</item>
</style>
<style name="defaultButtonStyle" parent="Widget.MaterialComponents.Button">
<item name="android:layout_width">0dp</item>
<item name="android:layout_height">60dp</item>
<item name="android:gravity">center</item>
<item name="android:textColor">#FFFFFF</item>
<item name="android:textSize">18sp</item>
<item name="android:fontFamily">sans-serif</item>
<item name="android:textAllCaps">false</item>
</style>
<style name="transparentButton" parent="Widget.MaterialComponents.Button">
<item name="android:layout_width">0dp</item>
<item name="android:layout_height">60dp</item>
<item name="android:gravity">center</item>
<item name="android:textColor">#323232</item>
<item name="android:textSize">18sp</item>
<item name="android:textStyle">normal</item>
<item name="android:fontFamily">@font/roboto</item>
<item name="android:textAllCaps">false</item>
<item name="android:background">#00FFFFFF</item>
</style>
<style name="textPreview" parent="windowProperties">
<item name="android:textColor">#323232</item>
</style>
</resources>
Mask (setMask
)
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="375dp"
android:height="667dp"
android:viewportWidth="375"
android:viewportHeight="667">
<path
android:pathData="M375,0V667H0V0H375ZM187.5,130C84.91,130 76,208 76,282.5C76,357 131.133,455 187.5,455C243.867,455 299,357 299,282.5C299,208 290.09,130 187.5,130Z"
android:strokeAlpha="0.35"
android:fillColor="#000000"
android:fillType="evenOdd"
android:fillAlpha="0.35"/>
<!--
The color of the mask can be changed by the android:fillColor attribute of the element below.
The default colors are: #22CB7B (green), #E74C3C (red), #ffffff (white)
-->
<path
android:pathData="M187.5,131.5C186.639,131.5 185.785,131.506 184.937,131.517C184.109,131.527 183.429,130.865 183.418,130.036C183.407,129.208 184.07,128.528 184.898,128.517C185.759,128.506 186.626,128.5 187.5,128.5C188.374,128.5 189.241,128.506 190.102,128.517C190.93,128.528 191.593,129.208 191.582,130.036C191.571,130.865 190.891,131.527 190.063,131.517C189.215,131.506 188.361,131.5 187.5,131.5ZM179.382,130.163C179.424,130.99 178.787,131.695 177.96,131.738C176.246,131.825 174.561,131.937 172.905,132.071C172.08,132.139 171.356,131.524 171.289,130.698C171.221,129.872 171.836,129.149 172.662,129.081C174.349,128.944 176.063,128.831 177.807,128.742C178.634,128.699 179.339,129.336 179.382,130.163ZM195.618,130.163C195.661,129.336 196.366,128.699 197.193,128.742C198.937,128.831 200.652,128.944 202.338,129.081C203.164,129.149 203.779,129.872 203.711,130.698C203.644,131.524 202.92,132.139 202.095,132.071C200.439,131.937 198.754,131.825 197.04,131.738C196.213,131.695 195.576,130.99 195.618,130.163ZM167.23,131.12C167.335,131.941 166.754,132.693 165.932,132.798C164.266,133.011 162.631,133.249 161.027,133.513C160.209,133.647 159.438,133.093 159.303,132.275C159.169,131.458 159.723,130.686 160.541,130.552C162.18,130.283 163.851,130.039 165.552,129.822C166.374,129.717 167.125,130.298 167.23,131.12ZM207.77,131.12C207.875,130.298 208.626,129.717 209.448,129.822C211.149,130.039 212.82,130.283 214.459,130.552C215.277,130.686 215.831,131.458 215.697,132.275C215.562,133.093 214.791,133.647 213.973,133.513C212.369,133.249 210.734,133.011 209.068,132.798C208.246,132.693 207.665,131.941 207.77,131.12ZM155.285,133.046C155.464,133.855 154.954,134.656 154.145,134.835C152.481,135.203 150.855,135.6 149.263,136.026C148.463,136.24 147.641,135.764 147.427,134.964C147.213,134.164 147.688,133.341 148.489,133.128C150.123,132.691 151.792,132.283 153.496,131.906C154.305,131.727 155.106,132.237 155.285,133.046ZM219.715,133.046C219.894,132.237 220.695,131.727 221.504,131.906C223.209,132.283 224.878,132.691 226.511,133.128C227.312,133.341 227.787,134.164 227.573,134.964C227.359,135.764 226.537,136.24 225.737,136.026C224.145,135.6 222.519,135.203 220.855,134.835C220.046,134.656 219.536,133.855 219.715,133.046ZM143.521,136.143C143.787,136.928 143.367,137.779 142.582,138.045C140.987,138.586 139.432,139.158 137.915,139.759C137.145,140.065 136.273,139.688 135.968,138.918C135.663,138.148 136.039,137.276 136.809,136.971C138.374,136.35 139.977,135.761 141.619,135.204C142.403,134.938 143.255,135.358 143.521,136.143ZM231.479,136.143C231.745,135.358 232.597,134.938 233.381,135.204C235.023,135.761 236.626,136.35 238.191,136.971C238.961,137.276 239.337,138.148 239.032,138.918C238.727,139.688 237.855,140.065 237.085,139.759C235.568,139.158 234.013,138.586 232.418,138.045C231.634,137.779 231.213,136.928 231.479,136.143ZM132.232,140.564C132.596,141.309 132.287,142.207 131.543,142.57C130.038,143.304 128.576,144.072 127.155,144.87C126.433,145.276 125.518,145.02 125.112,144.298C124.706,143.576 124.963,142.661 125.685,142.255C127.157,141.428 128.671,140.634 130.226,139.874C130.971,139.511 131.869,139.82 132.232,140.564ZM242.768,140.564C243.131,139.82 244.029,139.511 244.774,139.874C246.329,140.634 247.843,141.428 249.315,142.255C250.037,142.661 250.294,143.576 249.888,144.298C249.482,145.02 248.567,145.276 247.845,144.87C246.424,144.072 244.962,143.304 243.458,142.57C242.713,142.207 242.404,141.309 242.768,140.564ZM121.635,146.45C122.101,147.135 121.923,148.068 121.238,148.534C119.859,149.472 118.523,150.444 117.229,151.449C116.575,151.957 115.633,151.838 115.125,151.184C114.616,150.529 114.735,149.587 115.389,149.079C116.733,148.036 118.12,147.027 119.551,146.053C120.236,145.587 121.169,145.765 121.635,146.45ZM253.365,146.45C253.831,145.765 254.764,145.587 255.449,146.053C256.88,147.027 258.267,148.036 259.611,149.079C260.265,149.587 260.384,150.529 259.875,151.184C259.367,151.838 258.425,151.957 257.771,151.449C256.477,150.444 255.141,149.472 253.762,148.534C253.077,148.068 252.899,147.135 253.365,146.45ZM112.011,153.831C112.575,154.438 112.541,155.387 111.934,155.951C110.718,157.083 109.544,158.248 108.41,159.445C107.841,160.046 106.891,160.072 106.29,159.503C105.688,158.933 105.662,157.984 106.232,157.382C107.408,156.14 108.628,154.93 109.891,153.755C110.497,153.191 111.447,153.225 112.011,153.831ZM262.989,153.831C263.553,153.225 264.503,153.191 265.109,153.755C266.372,154.93 267.592,156.14 268.768,157.382C269.338,157.983 269.312,158.933 268.71,159.503C268.109,160.072 267.159,160.046 266.59,159.445C265.456,158.248 264.282,157.083 263.066,155.951C262.459,155.387 262.425,154.438 262.989,153.831ZM271.386,162.588C272.035,162.072 272.978,162.18 273.494,162.828C274.563,164.172 275.59,165.547 276.577,166.951C277.053,167.628 276.89,168.564 276.212,169.041C275.534,169.517 274.599,169.354 274.122,168.676C273.169,167.319 272.177,165.992 271.146,164.695C270.63,164.047 270.738,163.103 271.386,162.588ZM103.614,162.588C104.262,163.103 104.37,164.047 103.854,164.695C102.823,165.992 101.831,167.319 100.878,168.676C100.401,169.354 99.466,169.517 98.788,169.041C98.11,168.564 97.947,167.628 98.423,166.951C99.41,165.547 100.437,164.172 101.506,162.828C102.022,162.18 102.965,162.072 103.614,162.588ZM278.425,172.471C279.137,172.049 280.057,172.284 280.48,172.997C281.35,174.467 282.184,175.964 282.982,177.486C283.366,178.22 283.083,179.126 282.35,179.511C281.616,179.896 280.709,179.613 280.325,178.879C279.55,177.402 278.742,175.95 277.898,174.526C277.476,173.813 277.712,172.893 278.425,172.471ZM96.575,172.471C97.288,172.893 97.524,173.813 97.102,174.526C96.258,175.95 95.45,177.402 94.675,178.879C94.291,179.613 93.384,179.896 92.65,179.511C91.917,179.126 91.634,178.22 92.018,177.486C92.816,175.964 93.65,174.467 94.52,172.997C94.943,172.284 95.863,172.049 96.575,172.471ZM284.119,183.188C284.877,182.853 285.762,183.196 286.097,183.954C286.785,185.51 287.441,187.089 288.065,188.688C288.367,189.46 287.986,190.33 287.214,190.631C286.443,190.933 285.573,190.551 285.271,189.78C284.662,188.22 284.023,186.682 283.353,185.166C283.018,184.409 283.361,183.523 284.119,183.188ZM90.881,183.188C91.639,183.523 91.982,184.409 91.647,185.166C90.977,186.682 90.338,188.22 89.729,189.78C89.427,190.551 88.557,190.933 87.786,190.631C87.014,190.33 86.633,189.46 86.935,188.688C87.559,187.089 88.215,185.51 88.903,183.954C89.238,183.196 90.123,182.853 90.881,183.188ZM86.409,194.474C87.196,194.733 87.625,195.58 87.367,196.367C86.85,197.943 86.358,199.537 85.892,201.149C85.662,201.945 84.83,202.404 84.035,202.174C83.239,201.944 82.78,201.112 83.01,200.316C83.486,198.671 83.988,197.043 84.516,195.432C84.775,194.645 85.622,194.216 86.409,194.474ZM288.591,194.474C289.378,194.216 290.225,194.645 290.484,195.432C291.012,197.043 291.514,198.671 291.99,200.316C292.22,201.112 291.761,201.944 290.965,202.174C290.17,202.404 289.338,201.945 289.108,201.149C288.642,199.537 288.151,197.943 287.633,196.367C287.375,195.58 287.804,194.733 288.591,194.474ZM82.991,206.125C83.797,206.319 84.292,207.13 84.098,207.935C83.709,209.549 83.342,211.178 82.996,212.821C82.825,213.632 82.03,214.151 81.219,213.98C80.408,213.809 79.89,213.013 80.06,212.203C80.412,210.533 80.785,208.876 81.182,207.232C81.376,206.427 82.186,205.931 82.991,206.125ZM292.009,206.125C292.814,205.931 293.624,206.427 293.818,207.232C294.214,208.876 294.588,210.533 294.94,212.203C295.11,213.013 294.592,213.809 293.781,213.98C292.97,214.151 292.175,213.632 292.004,212.821C291.658,211.178 291.291,209.549 290.902,207.935C290.708,207.13 291.203,206.319 292.009,206.125ZM80.452,217.993C81.269,218.134 81.816,218.91 81.674,219.726C81.391,221.368 81.125,223.02 80.877,224.684C80.754,225.503 79.991,226.068 79.172,225.946C78.352,225.823 77.787,225.06 77.91,224.241C78.161,222.555 78.43,220.88 78.718,219.215C78.86,218.399 79.636,217.851 80.452,217.993ZM294.548,217.993C295.364,217.851 296.14,218.399 296.282,219.215C296.57,220.88 296.839,222.555 297.091,224.241C297.213,225.06 296.648,225.823 295.828,225.946C295.009,226.068 294.246,225.503 294.123,224.684C293.875,223.02 293.61,221.368 293.326,219.726C293.184,218.91 293.731,218.134 294.548,217.993ZM78.63,229.994C79.452,230.092 80.039,230.839 79.94,231.662C79.742,233.321 79.558,234.988 79.389,236.664C79.306,237.488 78.57,238.089 77.746,238.005C76.922,237.922 76.321,237.186 76.404,236.362C76.575,234.669 76.761,232.983 76.962,231.305C77.06,230.482 77.807,229.895 78.63,229.994ZM296.371,229.994C297.193,229.895 297.94,230.482 298.038,231.305C298.239,232.983 298.425,234.669 298.596,236.362C298.679,237.186 298.078,237.922 297.254,238.005C296.43,238.089 295.694,237.488 295.611,236.664C295.442,234.988 295.258,233.321 295.059,231.662C294.961,230.839 295.548,230.092 296.371,229.994ZM77.384,242.073C78.21,242.137 78.827,242.859 78.763,243.685C78.633,245.356 78.516,247.032 78.409,248.714C78.357,249.54 77.644,250.168 76.818,250.116C75.991,250.064 75.363,249.351 75.415,248.524C75.522,246.829 75.641,245.138 75.772,243.452C75.837,242.626 76.558,242.009 77.384,242.073ZM297.616,242.073C298.442,242.009 299.163,242.626 299.228,243.452C299.359,245.138 299.478,246.829 299.585,248.524C299.637,249.351 299.009,250.064 298.182,250.116C297.356,250.168 296.643,249.54 296.591,248.714C296.484,247.032 296.367,245.356 296.237,243.685C296.172,242.859 296.79,242.138 297.616,242.073ZM76.598,254.194C77.426,254.231 78.066,254.932 78.029,255.76C77.953,257.436 77.887,259.116 77.83,260.799C77.801,261.627 77.107,262.275 76.28,262.247C75.451,262.219 74.803,261.525 74.831,260.697C74.889,259.004 74.955,257.313 75.032,255.624C75.069,254.797 75.771,254.156 76.598,254.194ZM298.402,254.194C299.229,254.156 299.931,254.797 299.968,255.624C300.044,257.313 300.111,259.004 300.169,260.697C300.197,261.525 299.548,262.219 298.721,262.247C297.893,262.275 297.199,261.627 297.17,260.799C297.113,259.116 297.047,257.436 296.971,255.76C296.934,254.932 297.574,254.231 298.402,254.194ZM76.17,266.329C76.998,266.346 77.655,267.031 77.638,267.86C77.604,269.541 77.577,271.223 77.556,272.906C77.546,273.735 76.866,274.398 76.037,274.388C75.209,274.377 74.546,273.698 74.556,272.869C74.577,271.179 74.604,269.488 74.639,267.798C74.656,266.97 75.341,266.312 76.17,266.329ZM298.831,266.329C299.659,266.312 300.344,266.97 300.361,267.798C300.396,269.488 300.423,271.179 300.444,272.869C300.454,273.698 299.791,274.378 298.962,274.388C298.134,274.398 297.454,273.735 297.444,272.906C297.423,271.224 297.396,269.541 297.362,267.86C297.345,267.031 298.002,266.346 298.831,266.329ZM76.008,278.472C76.836,278.474 77.506,279.148 77.504,279.976C77.501,280.818 77.5,281.659 77.5,282.5C77.5,283.337 77.507,284.177 77.521,285.02C77.535,285.848 76.874,286.531 76.046,286.544C75.218,286.558 74.535,285.898 74.521,285.069C74.507,284.21 74.5,283.354 74.5,282.5C74.5,281.656 74.501,280.812 74.504,279.968C74.506,279.139 75.179,278.47 76.008,278.472ZM298.992,278.472C299.821,278.47 300.494,279.139 300.496,279.968C300.499,280.812 300.5,281.656 300.5,282.5C300.5,283.354 300.493,284.21 300.479,285.069C300.465,285.898 299.782,286.558 298.954,286.544C298.126,286.531 297.465,285.848 297.479,285.02C297.493,284.177 297.5,283.337 297.5,282.5C297.5,281.659 297.499,280.818 297.496,279.976C297.494,279.148 298.164,278.474 298.992,278.472ZM298.791,290.71C299.618,290.761 300.247,291.472 300.197,292.299C300.093,294.01 299.963,295.73 299.807,297.458C299.733,298.283 299.003,298.892 298.178,298.817C297.353,298.743 296.745,298.014 296.819,297.188C296.973,295.489 297.101,293.798 297.203,292.117C297.253,291.29 297.964,290.66 298.791,290.71ZM76.209,290.711C77.036,290.66 77.747,291.29 77.797,292.117C77.899,293.798 78.027,295.489 78.181,297.188C78.255,298.014 77.647,298.743 76.822,298.817C75.997,298.892 75.267,298.283 75.193,297.458C75.037,295.73 74.907,294.01 74.803,292.299C74.753,291.472 75.382,290.761 76.209,290.711ZM297.722,302.962C298.544,303.068 299.124,303.82 299.017,304.642C298.798,306.337 298.556,308.038 298.29,309.743C298.162,310.562 297.396,311.122 296.577,310.994C295.758,310.867 295.198,310.1 295.326,309.281C295.587,307.602 295.826,305.926 296.042,304.257C296.148,303.436 296.9,302.856 297.722,302.962ZM77.278,302.962C78.1,302.856 78.852,303.436 78.958,304.257C79.174,305.926 79.413,307.602 79.674,309.281C79.802,310.1 79.242,310.867 78.423,310.994C77.604,311.122 76.838,310.562 76.71,309.743C76.445,308.038 76.202,306.337 75.983,304.642C75.877,303.82 76.456,303.068 77.278,302.962ZM295.863,315.101C296.677,315.257 297.21,316.043 297.055,316.857C296.733,318.538 296.39,320.223 296.026,321.908C295.851,322.718 295.052,323.233 294.243,323.058C293.433,322.883 292.918,322.085 293.093,321.275C293.452,319.612 293.791,317.951 294.108,316.293C294.264,315.479 295.05,314.946 295.863,315.101ZM79.137,315.101C79.95,314.946 80.736,315.479 80.892,316.293C81.209,317.951 81.548,319.612 81.907,321.275C82.082,322.085 81.567,322.883 80.757,323.058C79.948,323.233 79.149,322.718 78.975,321.908C78.61,320.223 78.267,318.538 77.945,316.857C77.79,316.043 78.323,315.257 79.137,315.101ZM81.703,327.12C82.507,326.919 83.321,327.408 83.522,328.212C83.932,329.855 84.361,331.498 84.809,333.14C85.027,333.939 84.556,334.764 83.757,334.982C82.958,335.2 82.133,334.729 81.915,333.93C81.461,332.267 81.026,330.603 80.611,328.938C80.41,328.134 80.899,327.32 81.703,327.12ZM293.297,327.12C294.101,327.32 294.59,328.134 294.389,328.938C293.974,330.603 293.539,332.267 293.085,333.93C292.867,334.729 292.042,335.2 291.243,334.982C290.444,334.764 289.973,333.939 290.191,333.14C290.639,331.498 291.068,329.855 291.478,328.212C291.679,327.408 292.493,326.919 293.297,327.12ZM290.085,338.985C290.877,339.227 291.323,340.065 291.081,340.858C290.581,342.497 290.062,344.134 289.525,345.766C289.267,346.553 288.419,346.982 287.632,346.723C286.845,346.465 286.417,345.617 286.675,344.83C287.205,343.217 287.718,341.601 288.212,339.981C288.454,339.189 289.293,338.743 290.085,338.985ZM84.915,338.985C85.707,338.743 86.546,339.189 86.788,339.981C87.282,341.601 87.795,343.217 88.325,344.83C88.583,345.617 88.155,346.465 87.368,346.723C86.581,346.982 85.733,346.553 85.475,345.766C84.938,344.134 84.419,342.497 83.919,340.858C83.677,340.065 84.123,339.227 84.915,338.985ZM88.727,350.666C89.506,350.384 90.366,350.788 90.647,351.567C91.223,353.163 91.815,354.754 92.424,356.338C92.721,357.111 92.335,357.979 91.562,358.276C90.788,358.573 89.921,358.187 89.623,357.414C89.007,355.811 88.408,354.201 87.825,352.586C87.544,351.807 87.947,350.947 88.727,350.666ZM286.273,350.666C287.053,350.947 287.456,351.807 287.175,352.586C286.592,354.201 285.993,355.811 285.377,357.414C285.079,358.187 284.212,358.573 283.438,358.276C282.665,357.979 282.279,357.111 282.576,356.338C283.185,354.754 283.777,353.163 284.353,351.567C284.634,350.788 285.494,350.385 286.273,350.666ZM93.112,362.146C93.877,361.827 94.755,362.188 95.074,362.952C95.728,364.52 96.398,366.079 97.083,367.63C97.418,368.387 97.075,369.273 96.317,369.608C95.559,369.942 94.673,369.599 94.339,368.842C93.646,367.272 92.968,365.694 92.306,364.108C91.987,363.343 92.348,362.465 93.112,362.146ZM281.888,362.146C282.652,362.465 283.013,363.343 282.694,364.108C282.032,365.694 281.354,367.272 280.661,368.842C280.327,369.599 279.441,369.942 278.683,369.608C277.925,369.273 277.582,368.387 277.917,367.63C278.602,366.079 279.272,364.52 279.926,362.952C280.245,362.188 281.123,361.827 281.888,362.146ZM98.057,373.398C98.804,373.041 99.7,373.358 100.056,374.106C100.788,375.641 101.534,377.166 102.295,378.678C102.667,379.418 102.369,380.32 101.629,380.692C100.889,381.064 99.987,380.766 99.615,380.026C98.845,378.494 98.089,376.951 97.348,375.397C96.992,374.649 97.309,373.754 98.057,373.398ZM276.943,373.398C277.691,373.754 278.008,374.65 277.652,375.397C276.911,376.951 276.155,378.495 275.385,380.026C275.013,380.766 274.111,381.064 273.371,380.692C272.631,380.32 272.333,379.418 272.705,378.678C273.465,377.166 274.212,375.641 274.944,374.106C275.3,373.358 276.196,373.041 276.943,373.398ZM103.557,384.389C104.286,383.994 105.196,384.265 105.59,384.994C106.399,386.488 107.221,387.968 108.057,389.434C108.467,390.154 108.216,391.07 107.497,391.48C106.777,391.89 105.861,391.639 105.451,390.92C104.604,389.435 103.771,387.935 102.952,386.422C102.558,385.693 102.829,384.783 103.557,384.389ZM271.443,384.389C272.171,384.783 272.442,385.693 272.048,386.422C271.229,387.935 270.396,389.435 269.549,390.92C269.139,391.639 268.223,391.89 267.503,391.48C266.784,391.07 266.533,390.154 266.943,389.434C267.779,387.968 268.601,386.488 269.41,384.994C269.804,384.265 270.714,383.994 271.443,384.389ZM109.619,395.069C110.325,394.636 111.249,394.858 111.682,395.564C112.575,397.018 113.48,398.455 114.398,399.874C114.848,400.569 114.649,401.498 113.953,401.948C113.258,402.398 112.329,402.199 111.879,401.503C110.948,400.064 110.03,398.607 109.125,397.132C108.692,396.426 108.913,395.503 109.619,395.069ZM265.381,395.07C266.087,395.503 266.308,396.426 265.875,397.132C264.97,398.607 264.052,400.064 263.121,401.503C262.671,402.199 261.742,402.398 261.047,401.948C260.351,401.498 260.152,400.569 260.602,399.874C261.52,398.455 262.425,397.018 263.318,395.564C263.751,394.858 264.675,394.636 265.381,395.07ZM116.279,405.409C116.958,404.935 117.893,405.101 118.367,405.781C119.343,407.178 120.331,408.554 121.33,409.907C121.822,410.574 121.681,411.513 121.015,412.005C120.348,412.497 119.409,412.356 118.917,411.69C117.901,410.315 116.898,408.917 115.907,407.498C115.433,406.819 115.599,405.884 116.279,405.409ZM258.721,405.409C259.401,405.884 259.567,406.819 259.093,407.498C258.102,408.917 257.098,410.315 256.083,411.69C255.591,412.356 254.652,412.497 253.985,412.005C253.319,411.513 253.178,410.574 253.67,409.907C254.669,408.554 255.657,407.178 256.633,405.781C257.107,405.101 258.042,404.935 258.721,405.409ZM123.557,415.311C124.203,414.792 125.147,414.896 125.666,415.542C126.73,416.87 127.806,418.17 128.892,419.444C129.43,420.074 129.355,421.021 128.725,421.558C128.095,422.096 127.148,422.021 126.61,421.391C125.503,420.094 124.408,418.77 123.325,417.419C122.807,416.773 122.911,415.829 123.557,415.311ZM251.443,415.311C252.089,415.829 252.193,416.773 251.675,417.419C250.592,418.77 249.497,420.094 248.39,421.391C247.852,422.021 246.905,422.096 246.275,421.558C245.645,421.021 245.57,420.074 246.108,419.444C247.194,418.17 248.27,416.87 249.334,415.542C249.853,414.896 250.797,414.792 251.443,415.311ZM131.504,424.67C132.108,424.104 133.058,424.135 133.624,424.739C134.79,425.984 135.967,427.196 137.153,428.374C137.741,428.958 137.745,429.907 137.161,430.495C136.577,431.083 135.628,431.087 135.04,430.503C133.827,429.299 132.625,428.061 131.435,426.79C130.868,426.186 130.899,425.237 131.504,424.67ZM243.496,424.67C244.101,425.237 244.132,426.186 243.565,426.79C242.375,428.061 241.173,429.299 239.96,430.503C239.372,431.087 238.423,431.083 237.839,430.495C237.255,429.907 237.259,428.958 237.847,428.374C239.033,427.196 240.21,425.984 241.376,424.739C241.942,424.135 242.892,424.104 243.496,424.67ZM140.192,433.347C140.742,432.727 141.691,432.671 142.31,433.221C143.588,434.355 144.876,435.449 146.172,436.5C146.815,437.022 146.914,437.967 146.392,438.61C145.87,439.254 144.925,439.352 144.282,438.83C142.95,437.75 141.629,436.627 140.319,435.464C139.699,434.914 139.643,433.966 140.192,433.347ZM234.808,433.347C235.357,433.966 235.301,434.914 234.682,435.464C233.371,436.627 232.05,437.75 230.718,438.83C230.075,439.352 229.13,439.254 228.608,438.61C228.086,437.967 228.185,437.022 228.828,436.5C230.124,435.449 231.412,434.355 232.69,433.221C233.309,432.671 234.258,432.727 234.808,433.347ZM149.708,441.121C150.184,440.443 151.119,440.279 151.797,440.755C153.192,441.735 154.595,442.663 156.005,443.539C156.708,443.976 156.924,444.901 156.487,445.605C156.05,446.309 155.125,446.525 154.421,446.087C152.962,445.181 151.512,444.221 150.073,443.211C149.395,442.735 149.232,441.799 149.708,441.121ZM225.292,441.121C225.768,441.799 225.605,442.735 224.927,443.211C223.488,444.221 222.038,445.181 220.579,446.087C219.875,446.525 218.95,446.309 218.513,445.605C218.076,444.901 218.292,443.976 218.995,443.539C220.405,442.663 221.808,441.735 223.203,440.755C223.881,440.279 224.816,440.443 225.292,441.121ZM160.108,447.647C160.481,446.907 161.383,446.61 162.123,446.983C163.636,447.747 165.155,448.448 166.678,449.084C167.443,449.403 167.804,450.281 167.485,451.046C167.166,451.81 166.287,452.171 165.523,451.852C163.93,451.188 162.346,450.456 160.771,449.662C160.031,449.289 159.734,448.386 160.108,447.647ZM214.892,447.647C215.266,448.386 214.969,449.288 214.229,449.662C212.654,450.456 211.07,451.188 209.477,451.852C208.713,452.171 207.834,451.81 207.515,451.046C207.196,450.281 207.557,449.403 208.322,449.084C209.845,448.448 211.364,447.747 212.878,446.983C213.617,446.61 214.519,446.907 214.892,447.647ZM171.419,452.44C171.649,451.645 172.481,451.186 173.277,451.416C174.888,451.882 176.502,452.273 178.118,452.585C178.931,452.742 179.463,453.529 179.306,454.342C179.149,455.156 178.362,455.688 177.549,455.53C175.841,455.2 174.138,454.788 172.443,454.298C171.648,454.068 171.189,453.236 171.419,452.44ZM203.581,452.44C203.811,453.236 203.352,454.068 202.557,454.298C200.862,454.788 199.159,455.2 197.451,455.53C196.638,455.688 195.851,455.156 195.694,454.342C195.537,453.529 196.069,452.742 196.882,452.585C198.498,452.273 200.112,451.882 201.723,451.416C202.519,451.186 203.351,451.645 203.581,452.44ZM183.444,454.855C183.487,454.028 184.193,453.392 185.02,453.435C185.847,453.478 186.673,453.5 187.5,453.5C188.327,453.5 189.153,453.478 189.98,453.435C190.807,453.392 191.513,454.028 191.556,454.855C191.599,455.682 190.963,456.388 190.136,456.431C189.258,456.477 188.379,456.5 187.5,456.5C186.621,456.5 185.742,456.477 184.864,456.431C184.037,456.388 183.401,455.682 183.444,454.855Z"
android:fillColor="#22CB7B"
android:fillType="evenOdd"/>
</vector>
Last updated