# Video transformation

Source: [https://docs.qualcomm.com/doc/80-70023-50/topic/gst-transform-example.html](https://docs.qualcomm.com/doc/80-70023-50/topic/gst-transform-example.html)

The **gst-transform-example** application supports rotation, flipping, and scaling
        operations.

You can use this application for a security camera. Adjust the orientation of the
            displayed image using the flip and mirror operations on the CCTV camera. For more
            information about the transformation properties, see qtivtransform.

The following figure shows the pipeline, which takes the captured video stream,
            transforms it, and either displays it or saves it to a file. For information about the
            plugins used in the pipeline, see Pipeline flow.

Figure : gst-transform-example pipeline
            
            <?xml version="1.0" encoding="UTF-8"?>
<svg id="Layer_2" data-name="Layer 2" xmlns="http://www.w3.org/2000/svg" width="1050" height="220" viewbox="0 0 1050 220">
  <g>
    <rect x=".5" y=".499847412109375" width="1049" height="219" rx="7.500000000000002" ry="7.500000000000002" style="fill: #fafafa;"></rect>
    <path d="M1042,1c3.85986328125,0,7,3.14013671875,7,7v204c0,3.85986328125-3.14013671875,7-7,7H8c-3.85986328125,0-7-3.14013671875-7-7V8c0-3.85986328125,3.14013671875-7,7-7h1034M1042,0H8C3.581733703613281,0,0,3.58172607421875,0,8v204c0,4.41827392578125,3.581733703613281,8,8,8h1034c4.41845703125,0,8-3.58172607421875,8-8V8c0-4.41827392578125-3.58154296875-8-8-8h0Z" style="fill: #d2d7e1;"></path>
  </g>
  <g>
    <g>
      <line x1="72.484446674444371" y1="47.187851188500645" x2="91.586907949523265" y2="47.187851188500645" style="fill: none; stroke: #000; stroke-miterlimit: 10;"></line>
      <g>
        <path d="M54.534995293362044,28.285454200740787h-11.813998117349911l-5.906999058670408,7.088398870400852h-7.088398870409947c-2.609876245396663,0-4.725599246930869,2.115723001552396-4.725599246930869,4.725599246939964v21.265196611220745c0,2.609878498733451,2.115723001534207,4.725599246939964,4.725599246930869,4.725599246939964h37.80479397551062c2.609878498742546,0,4.725599246939964-2.115720748206513,4.725599246939964-4.725599246939964v-21.265196611220745c0-2.609876245387568-2.115720748197418-4.725599246939964-4.725599246939964-4.725599246939964h-7.088398870410856l-5.906999058669498-7.088398870400852Z" style="fill: none; stroke: #000; stroke-linecap: round; stroke-linejoin: round; stroke-width: 2px;"></path>
        <circle cx="48.627996234691636" cy="47.187851188496097" r="7.088398870407672" style="fill: none; stroke: #000; stroke-linecap: round; stroke-linejoin: round; stroke-width: 2px;"></circle>
      </g>
      <rect x="91.58690788012882" y="24.607115022809445" width="135.484417024431423" height="45.161472292501962" rx="2.258071355192455" ry="2.258071355192455" style="fill: #2a2aea;"></rect>
      <rect x="251.141183052019187" y="24.607115022809467" width="135.484416882331971" height="45.161472292501912" rx="2.258071350312989" ry="2.258071350312989" style="fill: #007884;"></rect>
      <rect x="411.421454805555186" y="24.607115022809445" width="135.484416882318328" height="45.161472292501962" rx="2.258071351683234" ry="2.258071351683234" style="fill: #2a2aea;"></rect>
      <text transform="translate(117.859375 51.706649780273438)" style="fill: #fff; font-family: Roboto-Regular, Roboto; font-size: 16px;"><tspan x="0" y="0">qtiqmmfsrc</tspan></text>
      <text transform="translate(264.21875 51.144149780273438)" style="fill: #fff; font-family: Roboto-Regular, Roboto; font-size: 16px;"><tspan x="0" y="0">Main_capsfilter</tspan></text>
      <text transform="translate(430.91796875 51.144149780273438)" style="fill: #fff; font-family: Roboto-Regular, Roboto; font-size: 16px;"><tspan x="0" y="0">qtivtransform</tspan></text>
      <rect x="571.29077956497531" y="24.60711502280946" width="135.484416740222514" height="45.161472292501919" rx="2.258071346907889" ry="2.258071346907889" style="fill: #007884;"></rect>
      <text transform="translate(582.5859375 51.144149780273438)" style="fill: #fff; font-family: Roboto-Regular, Roboto; font-size: 16px;"><tspan x="0" y="0">Scale_capsfilter</tspan></text>
      <rect x="731.073471786221489" y="24.607115022809467" width="135.484416740218876" height="45.161472292502822" rx="2.258071344423105" ry="2.258071344423105" style="fill: #007884;"></rect>
      <text transform="translate(787.73046875 51.144149780273438)" style="fill: #fff; font-family: Roboto-Regular, Roboto; font-size: 16px;"><tspan x="0" y="0">tee</tspan></text>
      <g>
        <line x1="227.071319580078125" y1="47.187850952148438" x2="246.117828369140625" y2="47.187850952148438" style="fill: none; stroke: #000; stroke-miterlimit: 10;"></line>
        <polygon points="245.096527099609375 50.67828369140625 251.14117431640625 47.187850952148438 245.096527099609375 43.697418212890625 245.096527099609375 50.67828369140625"></polygon>
      </g>
      <g>
        <line x1="386.625610351563409" y1="47.187850952148438" x2="406.398101806640625" y2="47.187850952148438" style="fill: none; stroke: #000; stroke-miterlimit: 10;"></line>
        <polygon points="405.376800537109375 50.67828369140625 411.42144775390625 47.187850952148438 405.376800537109375 43.697418212890625 405.376800537109375 50.67828369140625"></polygon>
      </g>
      <g>
        <line x1="546.9058837890625" y1="47.187850952148438" x2="566.26739501953125" y2="47.187850952148438" style="fill: none; stroke: #000; stroke-miterlimit: 10;"></line>
        <polygon points="565.24615478515625 50.67828369140625 571.290771484375 47.187850952148438 565.24615478515625 43.697418212890625 565.24615478515625 50.67828369140625"></polygon>
      </g>
      <g>
        <line x1="706.77520751953125" y1="47.187850952148438" x2="725.87353515625" y2="47.187850952148438" style="fill: none; stroke: #000; stroke-miterlimit: 10;"></line>
        <polygon points="724.85223388671875 50.67828369140625 730.89691162109375 47.187850952148438 724.85223388671875 43.697418212890625 724.85223388671875 50.67828369140625"></polygon>
      </g>
      <rect x="889.51558297554584" y="24.60711502280946" width="135.484417024439608" height="45.161472292501919" rx="2.258071356916156" ry="2.258071356916156" style="fill: #007884;"></rect>
      <text transform="translate(913.35546875 51.144149780273438)" style="fill: #fff; font-family: Roboto-Regular, Roboto; font-size: 16px;"><tspan x="0" y="0">waylandsink</tspan></text>
      <g>
        <line x1="866.557861328125" y1="47.187850952148438" x2="884.71575927734375" y2="47.187850952148438" style="fill: none; stroke: #000; stroke-miterlimit: 10;"></line>
        <polygon points="883.6944580078125 50.67828369140625 889.73907470703125 47.187850952148438 883.6944580078125 43.697418212890625 883.6944580078125 50.67828369140625"></polygon>
      </g>
      <g>
        <polyline points="798.815673828125 69.768585205078125 798.815673828125 93.5360107421875 612.56463623046875 93.5360107421875 612.56463623046875 107.888031005859375" style="fill: none; stroke: #000; stroke-miterlimit: 10;"></polyline>
        <polygon points="608.5755615234375 106.720855712890625 612.56463623046875 113.6290283203125 616.5537109375 106.720855712890625 608.5755615234375 106.720855712890625"></polygon>
      </g>
      <rect x="564.177340969454235" y="113.629021177484901" width="96.774583507676653" height="45.161472292493272" rx="2.258071344589353" ry="2.258071344589353" style="fill: #007884;"></rect>
      <rect x="685.468152314233521" y="113.629021177484901" width="96.774583791884652" height="45.161472292493272" rx="2.258071368952892" ry="2.258071368952892" style="fill: #007884;"></rect>
      <text transform="translate(583.7109375 140.167587280273438)" style="fill: #fff; font-family: Roboto-Regular, Roboto; font-size: 16px;"><tspan x="0" y="0">encoder</tspan></text>
      <text transform="translate(696.06640625 140.167587280273438)" style="fill: #fff; font-family: Roboto-Regular, Roboto; font-size: 16px;"><tspan x="0" y="0">h264parse</tspan></text>
      <rect x="806.709545884750696" y="113.629021177484887" width="96.774583507687566" height="45.161472292493286" rx="2.258071350999497" ry="2.258071350999497" style="fill: #007884;"></rect>
      <text transform="translate(823.71484375 140.167587280273438)" style="fill: #fff; font-family: Roboto-Regular, Roboto; font-size: 16px;"><tspan x="0" y="0">mp4mux</tspan></text>
      <rect x="928.225416492305158" y="113.629021177484915" width="96.77458350768029" height="45.161472292493258" rx="2.258071355680121" ry="2.258071355680121" style="fill: #007884;"></rect>
      <text transform="translate(951.17578125 140.167587280273438)" style="fill: #fff; font-family: Roboto-Regular, Roboto; font-size: 16px;"><tspan x="0" y="0">filesink</tspan></text>
      <g>
        <line x1="660.951904296875" y1="136.209747314453125" x2="680.44476318359375" y2="136.209747314453125" style="fill: none; stroke: #000; stroke-miterlimit: 10;"></line>
        <polygon points="679.42352294921875 139.7001953125 685.4681396484375 136.209747314453125 679.42352294921875 132.719329833984375 679.42352294921875 139.7001953125"></polygon>
      </g>
      <g>
        <line x1="782.24273681640625" y1="136.209747314453125" x2="801.6861572265625" y2="136.209747314453125" style="fill: none; stroke: #000; stroke-miterlimit: 10;"></line>
        <polygon points="800.6649169921875 139.7001953125 806.70953369140625 136.209747314453125 800.6649169921875 132.719329833984375 800.6649169921875 139.7001953125"></polygon>
      </g>
      <g>
        <line x1="903.484130859375" y1="136.209747314453125" x2="922.95330810546875" y2="136.209747314453125" style="fill: none; stroke: #000; stroke-miterlimit: 10;"></line>
        <polygon points="921.9320068359375 139.7001953125 927.97662353515625 136.209747314453125 921.9320068359375 132.719329833984375 921.9320068359375 139.7001953125"></polygon>
      </g>
    </g>
    <g>
      <g>
        <text transform="translate(847.928253173828125 191.484390258789062)" style="font-family: Roboto-Regular, Roboto; font-size: 14px;"><tspan x="0" y="0">Qualcomm </tspan></text>
        <rect x="827.677275784441008" y="179.392893634298161" width="16" height="16" rx="2" ry="2" style="fill: #2a2aea;"></rect>
      </g>
      <g>
        <text transform="translate(946.510040283203125 191.484390258789062)" style="font-family: Roboto-Regular, Roboto; font-size: 14px;"><tspan x="0" y="0">Open source</tspan></text>
        <rect x="926.259057197294169" y="179.392893634298161" width="15.999999999996362" height="16" rx="1.999999999999545" ry="1.999999999999545" style="fill: #007884;"></rect>
      </g>
    </g>
  </g>
</svg>

## Run the application

1. Ensure that you complete the Prerequisites.
2. In the terminal of the target device, run the following use cases to rotate,
                    downscale, or flip the video:
    - Use camera source and save output to a file.
        - Perform operations such as rotate, flip, upscale/downscale
                                        simultaneously:

                gst-transform-example -r 90 -f 2 --output_width 1920 --output_height 1080  -o /etc/media/video_transform.mp4 -i <inputfile>.mp4Copy to clipboard
        - Rotate:

                gst-transform-example -r 90 --input_width 3840 --input_height 2160 -o <output_file>.mp4Copy to clipboard
        - Downscale/upscale:

                gst-transform-example --input_width 3840 --input_height 2160 --output_width 1920 --output_height 1080 -o <output_file>.mp4Copy to clipboard
        - Flip:

                gst-transform-example -f 2 --input_width 3840 --input_height 2160 -o <output_file>.mp4Copy to clipboard
    - Use file source and save output to a file.
        - Perform operations such as rotate, flip, upscale/downscale
                                    simultaneously:

                gst-transform-example -r 90 -f 2 –i <inputfileh264>.mp4 --output_width 1920 --output_height 1080 -o <output_file>.mp4Copy to clipboard
        - Rotate:

                gst-transform-example -r 90 -i <inputfileh264>.mp4 -o <output_file>.mp4Copy to clipboard
        - Downscale/upscale:

                gst-transform-example -i <inputfileh264>.mp4 --output_width 1920 --output_height 1080 -o <output_file>.mp4Copy to clipboard
        - Flip:

                gst-transform-example -f 2 -i <inputfileh264>.mp4 -o <output_file>.mp4Copy to clipboard
3. To stop the use case, use CTRL +
                    C.
4. In the terminal of the target device, run the following command in the SSH shell
                    to display the available help
                    options:

        gst-transform-example --helpCopy to clipboard
5. In the terminal of the host computer, run the following command to pull the
                    files from the target
                    device:

        scp root@<IP address of target device>:/etc/media/<destination directory>Copy to clipboard

The following table provides a description of the command-line
                    parameters:| Command-line parameter | Description |
| --- | --- |
| `-h, --help` | Help |
| `--output_width` | Downscale/upscale width.<ul class="ul" id="gst-transform-example__ul_g3k_r1v_4bc"><br>                                    <li class="li">The default value is 1920.</li><br><br>                                    <li class="li">You can scale from 1080 to 720 or from 720 to 1080.</li><br><br>                                </ul> |
| `--output_height` | Downscale/upscale height. The default value is 1080. |
| `-o` | Absolute path to generate the file. |
| `-r` | Image rotate. The values are 0, 90, 180, 270. |
| `--input_width` | Camera width. The default value is 1920. |
| `--input_height` | Camera height. The default value is 1080. |
| `-f` | Flip the image. The values are:<ul class="ul" id="gst-transform-example__ul_eqv_v1v_4bc"><br>                                    <li class="li"><code class="ph codeph">0</code>: Don't flip (Default).</li><br><br>                                    <li class="li"><code class="ph codeph">1</code>: Flip horizontally.</li><br><br>                                    <li class="li"><code class="ph codeph">2</code>: Flip vertically.</li><br><br>                                    <li class="li"><code class="ph codeph">3</code>: Flip both horizontally and vertically. </li><br><br>                                </ul> |
| `-I`, `--input_file` | Absolute path of the input file.<br>For example, `-I<br>                                        /etc/media/inputfileh264.mp4` |
| `-o`,`--output_file` | Absolute path to generate the output file.<br>For example,<br>                                        `-o<br>                                /etc/media/video_transform.mp4` |

## Expected output

This pipeline supports simultaneous live preview and recording of the transformed
                video stream.

It provides two outputs:

- A video recording that's stored as an MP4 file in the specified path.
- A preview on a display device.

Figure : Expected output for gst-transform-example application–Preview
                
                ![](data:image/png;base64,UklGRuozAABXRUJQVlA4IN4zAACwsgGdASrPA9kBPwF6tVWrO7YtozJKo3AgCWdu0XIMfnce+1puCgOWgOnA8rAEB5Hot9X33eDT1Hc3zyi9E8+ceRf14tLqsfAh9X2Yk4fb/hFYz/N+gr7pedPJl0c+RJ955/ObbHtGTEepewxdLD2JT2T7R7RWksjQlto3wQ72cdMnhvcFeIit+t7tY1J7A0xCmHKqwYl4+UMbCVUmEjAThgSjyuzYgYO3QVvr02ToN/LrfHUyYmb4ofA6O4u9mGdN3/9MO/9Z9DQ5zdXs3RpqdHd6bReP2T3zO+XkEJ5oSwrZueVWQnwwIGbZF3sAXBCMovb0SCvpgDMCU1iUij0mpuZiiccnvl3VDh5S2ezQao0Y3pkigy1g85hzhMKSZR5Pid3GMH/ly3XmapuBi6IDYVdbSzNjU7CBcTN76gJefura2Jf8+wc8hiH1Q8SMF8CXsMbqxueSy56sRAcH+V8N1/QKTTH7HFFBe0Vg2/u4IoObzvlLoGo9xlkJOCD9tae293+F3tyEaCU2ENLZR9UHXqSRAOSM/jUz9UqIch7wqON4NYF6CPOeC3hDdrX9w+YmAFkMTTUaInbYk+ChrA+h9U4A38tar+wiuzqjpbQpWyjTibF9Z5sWm2BNzQXXMZeXHbSLdO4mZETsXHzbevDXyD4F++Gg14jQNxqE7Nrm+YWFeBgp3yeFkHJSDgbmuANrVevNsgPU+ZwOnMFKnsT/n4qVXcZ3B8XDqbEqtffAadNtpkY0cu/ZzmnVhkUicr+CKfJad+svwwfMmYqxHpIotVMi1dxRV7yPfmGO9ddBsUE5OmT17O+hDISDtgOh4jLcFHsND9uIU+JgbN3THI2SkVr3zrwK0DZ3TX/mI5i0B1zIWCFKmZAViJYlHeDUnc+y29dB1ELeePPFUqxtPIcByxmqDbohov/cTDuW924pbwSfzWw8hPbgqxiAL7XF+Wya0xYFQbtroiaX5L3ZykQlKS7CKaqPDiCizw9O0aeHCVQDQmbqk97obHCHP2abRfp33y59RLi+xwSCKoqY04Xw405bmx8wJPhUNPtzAjpZCnIyI94eG9UiySx1C1ApZUfKQAW6iYU9UcD21MqOZP1dIdC22sPVhtxLLY2Pe8JsZ0dmQlfoWxSrCqCKgZN5dhMQTerY/Fyt1lA4sF/O0OOmA1CPyaMoJKveMQvjPZ7uxWGyGlIOHKh9szrbZQ0f0r/KErAYBHDHY1VJo4y//26fSsmvNYs+1ZjOTUmTEy/fI1nbr/4F3HMVsqhLTRncmKwOLdiuVN8Vn7Hho7R0Bt57Jd3jk9sq1+/Y2LWjfls43yLyAImUohdOA99syDxvklV+b9tksU9dWa3sGIu0EyqdfFX+3ujuJl/B1nUciKhvWU4jjaBfMHt842kPlGpe32zM7TW/rHunggmvaRca6ORrTQk6wgGXFH2Rk9g0JGT1NYzDokH+4Sl7coB/8ap58/qZHQq3RHbb4Pgxv4K2ITNjv9rj2atk/fXqqctAMwuEfDbBsrSDcqx1auPQf7gsNk6qtMKnTXWfqhgr6tA6ry8nGGawTdjH3vVPT3S5a+4GX7Bn6dhXrz/ZQ+QrqGIsSOmzY2tf3Mles9iPiy7r1I7qqPa3Vt0PhObHVlaUJyz/WCgo7sRzCo01OwwkFxrdGvEolCc03LEjdkBFMNdL2iwPGSTpI26oKYHFU70qFuUs/zECkpkYdpslkHyMCE/kNh2xKzdv5AN7Ug6wYQIX5jrxezd1JOBv50rJ7CPt2c4wbEkKjTxJIQh38jxfbURZ95u/3/0deq1f6DlII0UNsirS5fftrZqX33s5f/h+lphgJdm1pHIE21FfKWdXjffnTPgkdkO1eayJcs/zFaArZajuJB0qW4XEkJsZoOjt6J3i3gnF+cVrHdsy9dM5ZF9bpwVOPF3z+9EESv4ANCsK+6PYUL5BWV9S9Q3SFYtQbt8emFd/j98r+m/AQclWRW/i7wdIW/6VPTuZtfqfPf4uHxAcLzbAR8uaqPs2i9evgptVoEy0C1ipxtH7MKjHBIcAZ20cOV855CA0Hn1PLs0WmwPD6y+fbPdMZg0uUo5H9b1lLsAkNXjKXlErVzf8rNaIcm56xep4NubJWiV+aIrbbP2BgradgQ1k6/l290V3kK6IaE5m574MgKC4JOEA4XzGq9zZgFUvY0hBDxFX3RnKm6zM9PEO/Uk4bMd/qGIOo8dxiy8UNG37pcx3ae1R1e2t1AA17yDMhtH4SZY7l25BKo+SM6OzKmEWpoDaz+gnOOWCSCJJWqHDnv8+lSyeONEauyiux1AzbVBejVTkHC8orMYVUho3+M5FPETftiLIDNRWyhhGAIt/ly+Ngiv/wsR0tW60oYGidakD+5istn322lEmHpG4FbgxSSr1JZ1U/rspQZbSh1tNF0ilxA/3+tupfiY1BJ2T9zN8UKZwrpb8RHJHDQPtJKJapGs1vxP3gNo7fj5v2Y1mIZtM939DVl0S+gq2aTYQYFCr/g40Bs/HhcT+Z5BFLcdHKW05kuMd5LZtUJkzfrdIxQVZAuwQxjiazTQe4BpfNT9Qz9Nb5ZOpT3v5Ox7YVpWdWI0hSpPiGFiHO2HhW0Br+fgNoO4mM/irNfAmtICU513V5asGxi3885v/+mhpJ0C7eimntTYo606Ymbl0+msLwLMI+NdWUvbbFkHI4KvBTDOwhdxq3wVfpaIpFR7VMr7ELgSvcxh0n8e0FoPZvu+L/tbP0m17qGWXhNci9EJifvpUWLjYQrRuzTQGuoFuKcLEYR5euXYZ1U3PcdDcMA4Dw3nvXEelcb0/Om3cHgPdyHnX53ooOP9B71bniAB+F76rJnW8h+siiRZAuT62tHapszq7DSoOjhvD5/dJDJQIzwT6NPEeOO1zKwXdmCwL3gIr/9Cj69VHHLV3yyOhu2+SFr3Xf/HOkWIIzGZUn1PAj7us53JDQdKI6Nt06fDuvMnGL21T582BqQJxJuBypmR4CaQrrbinEU7kzNDkUqgV14KTcbrwaptuhZEWBVBMIA0rG1VTAuzMcvKthOIpEgvXXD1wIJM1BO1TxIPN9BUyYkhE+cdBKP9UNhK/xwTeEX50gVQMxr2nFM+dTQoV/M6scInf7xJzG+grr3rbnPLkaQS/hCqF/OnAUWZNA/COvoQR13CKtuUsXYmYqqRortawf4gTNtJmpNunFuOgO8JUFCGGE8WMQaEuIrTTK/RJ1RyQDE5PYgLPRgt37vQ8Wu6UYVKAazOih85bFU3gBEH/yYDF6CMyqYGb4oO12L6Om2vZcC/oZ9jIowYuEPnrdD+9944WGpkdWn/cAYKrsM8mVMPkJBic3WHZeMYst6UzaqoKE5nrlci7emcF6RZFfQLxthmKXGS+brG9pr0b2cOj6dxQQRAEd6sh6jc4vSvHCMoRhtthV9A7bCA7Le+mUDAMwado9n2zBuxrsqJDf6H9D1GLxhvVxkNaE3kwoNC83R3Ek6Bd8DWf/usq8SGOkkeoJS0Yv3r7dBSBQKlHMNgpfla31pN2mauzPaa4k9p+IWg+v7BIljqYu9jd5AXA3DGcXsmO2Lcsla83fqxL4d9owjUR8u6vunK+WyIJzBpIXVqmWyDPl5TQaHI4n+OIyspYZBKSciO2pIVBhyoljvNg/3CVT6D/cJZsxLkf3ZrOiLpHBmLRI4OaG8n3AJewEHcXFLv6RleYXrW2/p/uCwvYkh3thyXHSwYQ4+d/46PyKq6BHS/ItyhdfTq83akrQZ0Ob3iut2ko2ePDHQ4kRtx9SOoumSlgODQM/ZyT1b5l+/SA4HNGChMLwwdYkMEpWWpf5awJp4oVzm847iCErYWuRQsTMsIJiCA0eFf6ZBZN7hmQZ8DyEn180WA2l2vOGX3wqgaL4gbmQG2X6x2Ho3/ovAMjU329E9dPhTlBqflEfSvYn8InreYP0N+mq2GtfYIQHbKFWUsaMxN7fefYenVTlx8uO0mtrBlzKZ3xPluFRQROX92juJB0CNCdY6VbHuwoYPxTZoYzJikdCQtsDYKQCEqlD96Rz6QQtlOfWGEHY/l+Z7LaO30o+MhVvbNENHbp13m6PveJMgQOX2xW2z7vsffbUKbrfcPEP4Hdan3lHdRG/KhSRLcSlRgOg6QsB7+eF6ncxws5JqZZiZsZ0di2XA28XkFOZYsmQmdxrYQ3lqCZh+QX2TmC+Sb+QuAWoEU7P0fa057cwbLZ6OeMKvUl+rXGH7NUOqqz9uLr/Od5a6/x+VGzD35sExdV1bQ57HvBndWnxQARVzaKGdwBt/Ec2bVCjHG41s6yc2GajsYkqEQIGRwOEyU/RbKLWXIKaO+wz/aCTZ1x/ubrByUetbI67F8K+3CBstdL4Lax6wAe46N3Autc/ciLfJZMbs4UekqvyuXd0YICJZPaNhHaFIbDyW5KGhO9YqZuO4kAXAU99/3kHq6hNM2rsshUDtDtDgmsaTjs9LBDhxOInlphT50zY0t2v3A9bXEj4G3VfyYYT3syP/gMmAkCcKfLgrZ8eo8fBOpWT5YnShD/YjOjsyhcwQUwadasV6FfGlgC5d88GQ3TiCX0mANu78c762eMcvBBNTY4ndV+WlUZNsd001Ijuu1oFDH6WB225UopIo3a/ev0D/fBOdHjfAAA/vNiGY3yUL2OlPvhv6dnVnIh0QLe+Za2QjqlEtgSq72f/dTF77SFgeVLpEmDiNmxjyu9CccK9TlM4aQjnrJS5mYDUWjgQhuJdM+5XinhVYP+N39rDPTnjCEySTDVcho3tZqvzGBpzTL0ZcT16VAVdKOmYfuiqa4u26S3ODgTUkgRbmrxp9vsFAQbpyeVopYrCLj5x0m3Cu/Y8Zbx71RUNdCGB264J69+VD6Zr75n0X10tNLTHS+GzT4TByV1Ng8CjX0QuXJrHJuEvla8Zq7Bf3o+phWwHMMaWqsrTSljd2Ncm7jsjpvVa2jpdhJkTzjzG9pYUER3DUVZlSUSQxWjg4qkaZF3h59vtY5BWLtU4+8BY2xfaid9pfrsAnX2JgmTDiATJjQRbDzH1+j5alkanBKdIBX+l5TFYNLi3FvOUixBOuDqz+7ifxlD6UmhWqjmlqlH/DEmGTJOW8eA/M3J0EZKzFKE/Hyq4KX0Ju3AMGzhWdvCQSaEDU9/OsM3XY9KjYhOu+kKCkmxEQ6E+KiN9Hi7zCKpZhQmG7JxBsYGHNGmDvXBVVMM91AAJZD8cqHr92jNTBZKj3jC1rn8SkGUpwi0sWvll6lX1kTxZAvk4Yl/v3/TDoPAJV1OkeoWfQRj+BiBNJgQ0/ZRD0Gxvh7lHX56X3VV8ec9M5WlnXlqXIzo+WQyxFm6mZuFnvA7TyAFflLJG1qhUd1Ut7KRUPLIeq7YZqIn89lOke/Lc5w9v1S6GU6MUMWRUCb2OCj1SgeHiFHf1P0XDM6y8EHbkmgTaurWMB1/6n9DbvVYA1VFtO9BUlzOk2CUn+4bg0Bzqi9nInFAc+9kEjMQ3456glwzB/9Rw6J0CsVulLYpGFdt7A4Uiy2VP46E4k9AgiAx4m5BpyTr3D7kGvA9e7OoztDRt84Uf1FNR90N9RRfH07W4ZpApBGsjNyuEbVpHrMQfKSHEl4SjtLyKdwaEkgV51QOAYPrSKDDwNV2qTi32vihZEyR4QlMlZhHr5WNFpsC3/8HBqu5z7tkXCU2t2zXfFIeXXaapDtOk7fqskCfg1E4ggNlKUheMuXWubMRG0jK1ITIFL/lN9SgI03R7UHQL84gbMNX5pNzVPFZ/pIGojzY1oSqY3RAD3+55Aoji3lG9fdn/J4Wr3/JWBb6Nu1j6mx/wtKNlxL/4KRXISsfYfRZbq7RZXZetwKfGSLpvliVs4hCP8J5h7SzSli5w5ECc05lG+TQG9+D3ztNxfxiKvBi1s0Eb009k0yrOsfsIC5SvP5jzt4DdF4Ho22MNTuxul33vjM3qh/vsr8SbNumpsDRcmAgHugPMlxGCkXGMitZs6okH4hnVNVYlOhE/WN/GA1h6t93kH9StHaK8+vdULMEvP2UKpfLoq+2y3j1PTsMLvzYX/NiWQtuQUqMFFQ5/pIcQ3whqSYAsDiWS8j7moUNMOuzMCIH+YonTHuknPJQAD4C1jwX+FOV4tuJZuu6aOi0+iRlfnrNrQYMchMezVGByVfm95LC2Eg2AwpbsV7IfqmuddiDQILrP+P+0Ij+vafeQWmp9udjD4Mtp/ireVUjMOc+ME41w40vG8SjdTu8aBzoC6gTo+q1QTzf9pgHdZG633WbpJcR4wIuGrkABOn6uZz+W0DhruA4xm6iDwtPBq5ljSCNfmrvNNECxrZjdsqRVo1t7K8zH8X7enx0ddMFr29yDRL+5jCvDscCrJu0LlzBF6vf659pg80IQAukAMF3kJeugAiWGyT135phyzQbtSI1x5U3uhpuSvDGgrMqM2xdwp+8rzU6b+xl1sOMnYdrk42vBwbTd+VrI5IXvow3e/jN2TiWivKMESh1n7h7WvifCkqL2nfa/gCXEfpTBqjH8xOpaeGR93Movj+vzx3gIHJGUJ7wPM0TtekQy6n9q/8kMRJwGshcsr2/QznLM0hoHaGaxWuPm05K/15IeN/7XlDT86G5zUGfkbrJxqODgmIfAMVWTLHN/kinaGfG3fBBBPgADEqhJF5RCoQANJbAWB0tR9yg8apXOM1rANKoKNN9WuZZaA5+1fPiYMmTqjA+v5PsdfzNAi14wA6g7eEx36od9zrFe1eSL3Vn/iobzJdHQnTDO9enMxeB8Pp0I+h1AsSqD/jKedHawVu5NzuQARZpYNU6dwMAXO/1k/+t74Kqt5xuAIegd65xSppBqs9g4wPzusyZqAWIniqdyHvZ5pxVv1GF8CguLeklkHw6xFjWkyQRgpVNMFO0TAASKFsIIVuK4mtHb6HetRitdr4sjQ9zwIfsqkNESN5AEC0taSeTxoZNWcH+pp4On37G3q0mHSOFb7XmdIjCjz6rU2ZSicYrMElYoJepXjDkISjC4hbWqreWAvxSULLy5cii6et+pXMEcUXyQD6IJyIpizoax35okgWXD4Gzf9BrW5p84rBSgrCDh5j0vBtcnK2Y3Xe1glltIpISkSRvMOj3cWxNr3kvzVZRGh3V6k/EsDIvst66h+w7mLZNkaDvmxRkzb2Wmz/DrNrYUtDlYs66fA5kUNW687JhyrwDEDjLIuMyACI2QXYOzFxNUckkcqk0IPkEEJ3SCMfO9lShD/TJ849erBLi2JpbQ1b23hyF08kkPcHqHuh9HSNkME1to4FN6J3fhho//7GWlNddIDzPTpQvIdN3PDyqFDTHckbOIDFMzd684va4UE0uWweQUZUVvyz93njNAJGTJhXOmfpLD+pDyZi5LpF4uIGQAG/qGOgkBabvoIBuPsI+oXOqLV92eukAB7eTGBT5DmHud2GMEd0vPZMZhrB8t/X/GAHpdYB5cGWG/td4pmVolAAJ6nB6sv/CTQEjOXUcXEqyC5pCMxwNtwAUcpV2nVD2SDAXWB7ugoHA6u6PHRZa9j2lmidRHJJXbWhaCO1KA+rmCgC3EyPBBxQmFlT3jtwu3+G2w+uVnSL5B3QRuU3iMeil6P4kVCKpvKo1r4TDCIYWMH1JbObELxRREsVokPXwVsaZww1o9aaYWjTEaCk3x6EyOzOp5mXFtkwAtQPIKQyp2YQW+Hhnc6X3G4wK8JItV9xDERpHy9MSKprfIiYcgzlIZlfmIRLHsHFnyYnlamSBvZs43V0Mv+rMQhDDdd0VEHbKAIG2OY/aeZ2pm9L26qwiWrOFMh4EXIamw/oQ/Swfg88z2oOaZkjH9ef4oR/AKoyKKjbcYF5ND2dos+Dh+uAAT1CF97VHGsAuE6AGI5TwWoSQtGFFPiHg7BSG1GRVCTzs7kF91IUU+lmRXpSofCpwMQiPFCFfGqRtAt+62kZoOF/pQg0h845h1KCfOZgHO2QBSlWrnobxUv0dd3mECBUro/bpvPMIg9H9xIbbSoUHJUEHh8E2IwtzfXWWcKw9Y+YBfRKKgp14FAo9dNMRu6jsP09keyiIZaoABpbvuStsah14Yt8uYRz8LXcLuyYGhiW0rV77NXALc0st9Dc2j4GqNJc1Z6CAASJWAVNvSVhGC7IiDm8+XwGCHKtS7vrLKwMmmIFOL1IMNJEbAhIdc0e6od/ICXKuZK2EiIDUiJxYO4atJYP157oT2a99w3ukZO8t22MizclrVBYj4jx8bVEEvBuYDTGNSaSkUjIQXw/yQ4alK+oapSpYsfMcN6+J4MnQHCaYor8aeKLH2k/p2DAhqoAAtZvzddEnTRfNq9hH/+dS4p1O1qV0X+Vm67MZnOQMb5/2L8aHz7WBFpCkyTHCOGFTFc7vYLsMJMhTz4sSytELEkVXbG1PBbFtlPVYnrzRGDttCM7QxUJG+ivRvhhGxj5Dh7YlbYb1UdCHy7+eki1KpJ2ZzLk6yr4lp5ekecKd+gQ6QZ/oDjODxNIj3kC+k35FZGpoJVylxNwL2epthYPZeWCqStIRAtloRuKGYsKr1kQ2E7lD+gDbmVe+To+EiX+B2TN8K1h0YJJICGCRzqgUKrP/dZYtsLCS78vWCcnagcpBiDgdBT3yeOBhubxrNWb1ztAxwdT+N1wZuTQ+qA+qGNbX5rg4P1o4pC6xfzhkjzMmX2oyzaNvFKn5ERDZ4Q40Tt/mFYcshGtjlOr/1LeqeUJGOjbvtBBLCIHDlbRwOZ4MkEI/rPnAm6wCFILl6wBEoAQZGX5Y2zENBU8i/m3GnpJC8Rmg3/39I3hyUBv3WfXYXDyIh4AAAAAVlVRd9/WNvYzjciNMLx/CmeQuBEzz78KMY6NK73Nn3qCQxHZSnAClnlPOCv0h05wT5aDU5CNGeuKeFrbwP9Wwd0WcD26ecWYG22+/pfM1ZRwKBfAFyJagM/kc3hAUfv5J4vFhUFhzQC9F11GF9d7i6BKRL2AWBYaYOdQwkZEt2+voMU8IeakAyRhJKbEcmfXrIdL9QhcXN+lzO+7l2FGbvQF8JPOO0JoLqIqKuLUB65aDvh13aQhufTWsdx/xbLBGSt+mJkC5BPU9yB5/RSv2mjsBnpnqhIhxRigQYol1xJv7GV/jhs1ef4VgI6twujZwdczuPsIDuPxlU2k9Fs2PtnOlK5DyxlaWdny4ZO+pYs4DG7d32lBJArKIRMcxTk0nzqQdQDGfc4VmaWYhw53JYuUOO+W8ekN5PTcqY4nFrvyVPhx3yueFuLN/S25OznSDdbmLFej40sMty1p+JnkCGF6RqNBP/dAGWE8mZ23KHckDEAe2yjVEY53jZH1x1o8JWXPS9mDI47sa3Pnx3wqMY7/bRrp9rDTzZdrJEVud/7b9UH2icIllHhcMhC4+ijPziVbeFdTuOuC7tiKJYv364rdCBai0cI2ycIImk7+/9cxfozsl9gwpLGJxOgNofZyjEIELHD/FB6npfKQIByDQ4iU2RMoV16mZ/o/7WCq3id4ZpinT8uh+6lMP8s0HdvxA8zpVZH1FzuUyhudiDqO5+EQmoqry+P/xkpoUm3gy3Tn6FoKiIevQNwtE9UYoH9Yu0+66IbfEcSDZCAsNZJRnrqFc1AeTTfGzbQEEDasUO6CWqvHsAOSgAK0JyS9FGsca5K6o3RtXmTUB9SXvbavB/gba56MNxRAEyywJClfXaxprQL3V31qgQwhAlWe5Jr8CfwBMXWq/KO5DUyOnWA/PK46QfqOUv5Rs7Q4+oHnc5BbJgD8MgzCjlIW1QLoIyrAXtFqloWpRquw5WZg/GRSmRV661y9rOzV8P/7/P3l/AcCRFAtPM7OyxkxELrXfvbdKYUurxIshKs2Yc9A629AKu/WyqMF72SlixMugTKDAPIA3M5cpgeNGTV8sTVGCmNGHH4PJRGBRvt14XU95zgzCjl+79gz800V6bqfOejhRWdmKrNimiMxMLfuraD3mFSw8U8qhLOvqQfSfMBNuB1VSD26KORwHyatyu6wQOJVgLIP0L4Rdiukx6JhoImm5Fyk+L/tYjuc/6VBu2yl+VyJ8FxYP6m66I8licOwh+dEyaWhmV1VsbFRh9YJ8hZ4N5oghFDm7Yubmslw0olqCdVCDGOHq7htUIquEbKvspy86Q3CNTyHEKM2A5YQ0cfQ4ewlK95fGVy5daOkL0R2YKWTX7wcke6n8GyLmghGLB2G22xEzEnZz4ZqN2bXE2NW8veyWpaZB4uW5yofWznO0FHtQBW+NfXDf1YE6Za8D5JE6RBfU2psWqckM6mXYxqCc94fvIfvwTJtFCZcoNuOeyqyj1huCQIMcGK7Za+jyVtB5txzR9H+AJWBUKYd+RbZ7f7r4GADfwAwtc6AzmzIHDFATkJP4TbCMr51ZzkPaS27F5IegjCW2wv9m4nUvmNbIQtlPMMrjsWWqwGF5tkAu+gY40zyyWa9HB5UGbozltCYJpSDIFNjysGdXPw0NV0rV6bi94sjvxncD1Oh6qzm+tOskQKH3Byc8pUjB+NrZbRLJ+5xTAh+PqWUIpT5jeq+p+t9cK5Xm8XC6NGedy+vqKvR+D1QKNErdoWI05RF+YqhkSb/9N2We81q7AATE7xdJpLorheNvDZCQcpE7ydQPDcwb491Qo7nwhrbamkV50uKZ2K2c8KC//yKpdQLYfSuKDD+jVX1gkFCEdDao+9ZiR/GyURF2Jpp0+przzpF7rv3n2I0HxgfuMpQSouetZECWXqdelyqcJdhBMiRCVO5uve9g9CB2OWmcu85jkZisx0zYkCd478/gIxFRCtzAsu/zMqTSXg5Z1MjVj1YUxFHdngFOKb1S/uV2X7fRj1TiisYRSbZWwAT4wXHvlg0nhp0zQ0G0J6mShdKIic9iVPr2JsUrZvbqIrNGwbFgd+PMbq5AMyH1v6O0ovgUdXdsLIrXG28S9FmgHV9NJMwniyej2XkoIHu2qPWN9Gsfq4T5EQ7O1uyyhZEgzWl91JNncdIziqBmHREy1jggo+zkXEWwQ5RAyAsrHZuF08aseaW86fUH6srz80AhZbMDe6rKaWiOQjCs9Qd4rKOSEG2LRAp11zvK5l827PH+IJwzXZnTOrz6fVNCclrs917YgDQyJ2o/emyfbsmonccPwt7aPPmpaouh8LISIrXcCZoI7Q4tFqcFky6cNw2n9bfyQmSsaCL0LKowjLG+xVe58VLQjjc0acLsFGpfs8Um/ZvjeBHTU9Qyvcww2LwdM5wsAAACrWY3Jpoz4xXjo+b6dzDV9+7hRI6OZwnA9PDay6lxIZ/qMwsNa5yGcBRCF7vCEltu2k7E4FJtRS2hTlR8epiHyO9w/YUqU++cBfs1uhoyYw2NtCKSNn2lZV4Q/U3/8LbFRNn7HzCjqhTIgacb1oovPEbnBG7TDNBqRs13FYe6axrEaPiYuk7c3B0WPlGiXjs0riWxZA6opaQjT3vTav3AbTqldRIbtyg+3HWi08Gn2Inh+Puz7O7d5MF+HK0q9mnNrPtyZqev4IzH4bij8ZCFCu5u8HpVKZAQKOV+Dk33Ls1MrrS3vFKY/Z/9eyniKH3BWM+iJWie2ugZHK2zut4qESK6QGf5550GGMahUy8LWOs+HjqsJUKVf08vx/WdeGmt64n9RqCz0ucS48O+EQweXBsj0kozw06ZFbkWjPI9jOISVoJJtzV7N0Agmm40KfhrrcjSdkLxNST2UM9qnmQPrt/Ibm5rZMxZ8eVB+z6m6CipsQHs+ZxyaoykAOp12/ld99gOv0z8gjGXKDEgnJZGl9vcciTEYUzrp8TWFssmtDtQxaQObSrd9ML7fxxnXr1+6OvOxjovsdnr+qguFel9enS7/YC/BpDQZrBTEy9UFz3aikDB/wOs0IDo9rhxX8llBd81fPyUFcdP9tCF8QC8p9dcdgrEvTKBW6dCEgQx/iwJkr+Z+B4bTbBlNpWrXF7Suwv8LYpaoi/T0dd0mWnPV1WTW1A2aZFF1BqQotRtvO7tsVuecWhuwGOSgBFWEp+8Mi48D2kKOlCNKbX2cZ8R6YEfzFKzNjAyn3G1cQ/kt+m+0lsvLAAJCO1AtUNQVYJmzN9kyAYMZnX5lBf++OceePuNuzeAcTZ5lePiRCe7VHirGNLtfkmStqarRBiGkv5FvJELTbV5BHBQXjDX6jLboLJ7wT572uIGHaQbTNJ3/fOK6PN89pYclNLwo7ldRsGrnDEtKsIJ9fZBNsctofjYJGdq3yiEcJMpXpDAu2OI/diUExJyv5QmgllCdikRLpv5BieEAsQ869AizUg2rjVhRHDO9bfHbb2t4zZZ/n8EabNOtLb4KPrRBQDr8MGGYxRW7Ro8nNqfyMZ42SnTwOLjdn7+g4ecMOFKuVhetlA98RSXwGyRtpI6230exGkc8DEb3Dw3zL1+SO53kOZMjOtpBd6R9+w1kwb7VmOLcc8I8C3kFX2lhy+tirkzpW4NR7Y0vaslYR9pmr8mTzs23Pdj+yT/LNTLfj6hJtHubT9j0/1QXAKii8gDbijJTvGpBT3s1MdJqMhf5zRcBn6tJgEFfy8ZSBGBJoEtyDpnZSwjkTWVyIBv93YwzA04MRRuhWOrVqe8OLA3braq8psHNpRu+qSsi0ib9AwMrw8yLwpmx7sGUReXXv5YSoa52nQvf5zBsYMyOqFk8wYoxRaZQw0gLt4+ulKsQe81jvLZ8w/LZGECqoEt2CYKVHZHl0ZuUcSuOwBEuRp4qJ/qxZdcgYC5fXqY0pY61hb33Fhc/NqhMmeI6El5pFzbdaQr2O8oCzKNvCwv2/OPE0uz2m6tBmkJWokcedXV51VQmgwWIJikk1SQBDgAsgpuPNh8l7G7iZSle8YQWBXWD7i8UFxRnbDsVIevpF8LNnB2iMKDri9Nh0X+6pGR4MhoK1Scqf9U7iH6oXgsvwTycdmzLFLNFBqGsxAFOQMCbzSzBLlr6IgtkOiwIVs3K4Hs49l4aCs9I5UyytTqSyaNMpT+ymAGFV/5wZMk3RSda87Yg00ceuyN7CnJGTdvWMfcFsbxQjhRrHrIzcunSEpDVuXgNDKB2kfwILfQ2AIsDigm61YSjyrOA20vQLG+lQxbG+dLtf4FQSCVbhjqk5aYGDI/ajk+hC5eFSPvtua+SPs1Deh/eJagiEkDgtPLIFvQoqGN+fESD5qPtBwZhse20mqcYeRrKsiiCB6ya0hLBpWa5+0RK7a9DlP8NDRrL2ZsqQbHpiPkGLnFbnJnHWN6Q3Xia1lXJX/cR00r6vWbKERX03pzpSBX3AaJ5C/4E+kxCWcTINJgFNikjehbSFIKQKXNjw6nJ3/pPt+GKehdNpV2EeKMTJniyqoEIfxDa2Mom2XRuiS2yyTnZc5F9TznUHCC0EpKB6bcpCFiolwLgd8DJMn1CMG5zsmiMBF6WPH0zp4vCt21bSPa0o0Ome9wna33hbE9s25c3cN4zJvAtegohwOjuyVk3O8+3D6wyPQ5uIVl31Xs8NivtLzhAjj57a2FamJZ2HGN/arKhXGg3W7m6VAedV+n//WIj/ROTS6WC2Kl73x95G64rWavhgewrbI9PGYwZQlV4VboIywFgaYK9MYQszvd+qAGm0UwTK/86hxYRhqRppw2ylHhQAEj5df1KOkgkeShBzJc4N3h6yLgmq9EDOVRVgTJyFNnbQV8XKoq/FyIBH/FiCsXPc4Z6twoepVMwWr0snvjSc7gpTxeITniHFkRMgYCx656F4TYQdx+jhorsNyHtaPv8v4qxCUi9coHONA9rROFqOwCsCA+Mj0T/IvuRV+PXJZJkR9VQ3uhggrMzSPPGSqgSLdaTfnyXn8HE1pAkgM1nLAB9lBTDXSOlcjWJCbKsFgp3XZD/xggMBZJjT0N05vxhTkm6j2yC+nC12SXBBjiITJt5WdCPHmiPxu4tt5hCnYuQMVTEn5+S+tUty953sIjjIqu1fdaRlPjCAWEbKRWzCR6HLTlNMGqMcetl5DyGG0Y8IRhALi9wD3fx5sXpbmCmy8m1u0qlDL94w3mbXUfvxH4A+kEMeqoFPJqUJ0M3FOAJsP2UWAXpoKZBeZOHbi/zIv3x/eVE03XQio/y0keVCfyklYrNJpQ2wXWHtjjyP6RlKOqv9UvhN9EBunEjnAqO9UGSzjPiPHKhtNafC8LICrz2CwCSr+uqkUVmonKnciqOAz9mwbmub7ZgR48FbgsVGIDwDV7jPXDWCGuNWLP7SQgIfcvZDEMtRORbTNsF5HqwS7uXX7687FjMA8c4fxs6XLSvJGr3GqqMlYf2ERwg+teRYeBog3sBJl5MwV9WlSVylC86RlH0OCEAYv8572eRTtbQAAIAFFcAKiOcKVVaTHen+pVah3imjQ+xkQeNkAiWWqSn1GBfJerskSHgPLYsY2GAwfujiQLWnm7AIdtTTzATouOv17s2w1KUl5qFdUk7KLlNiagmuVbztOGbxWY+7m9TvhMiZ9f1cuD2MZs5D1PfJVJBz2r4l9AQ43N23WPAYOcbVbUUFIZ0QWuwUwplO7/Xu76s+nS0NNe76qfIkhs5xs5Xsm26XDvo5/RThhywrMq5inDBv+kkhJ1cYkrnkoJscx/kheyNjdoP3LyXX3S5uccHzF3OopDEbDOsyqdkA5ICG4te1R9SjSu0QY1LdDo4ZZOlgBqwcK2cBzGilpli+ETsl9piH+2caAeSNjbxXefXCsg+eMipfgJH6dtpmPWvuU9J6KhVD/MPqFPcT4W57d3wfZt0jPOsy4vfMCTNekmygP4ztTrV2BgkYuSps+vSp62YQWxveNd5UcbBkjrLORSXgchVQiP6oiaasciBSg+r4VxlS+EZBKAXOziL6wJ3LTUg726sgc4kHCFMVpCLT9SLXEi8Z1OzFPntJihb5VDjn4HVJNaS+wDyN2PEvauznauBNhQMSZykIwWr1AvONE2ILoGXsyKOxaYFgqU7Wumjqj3TdAg23OWHIPvQdyFXV7Sg7qA62mkRkIQACLQSxMSReUPr6G3wNueHrSgiV+uos85hoyJ0R9Su/TXbwEKjU0treh2/ngcSIzYGhX9ifsozPyaYcxzGwPvccfoNJ1mGpgtw5FxPz0aPwtr9r12ufbnM8NDbq6cpCTQ6ya5H9IU3Qgwo/PzZzaR4CAiI0kPJuTwaFnBHi+Zct+QFUl06zT2yLWR23uA1NGntk2niCQTdI7frgBqKSX91CSVW2Sm511FGgU70+yTjP4vQ8MK32P88jUawq7k+bxonuulJsAzPH1MThqdan0s9lX7fACTltdSSbvaACnV0WXQQi7xCopzZ9c20zonRkuKtRu5LaqtSlQMKpPPINetLPSqvBDbW5USnIQoVglMyu3GO+c0FcexzshNUXJwhMwxAZWqKv6wqGUi7nRuNI+Rr1xs8qg3mGE2NKi7+xf3EG8TsqmgNHI/SvisBhqNDu/zAiVhX/eoh7AsVFZasztXsFdvlw07X+lPuPyObF1b2oYjip9FLe+lWlYWNsKBdBZG20avU4txDyWRRYYFcxPWqIfMa2iGiKGBz9lcPJ6fHyqcd4cqjR360jGdfyJBaOcJbGxz0713M6hynItoe91gucj9RqwOIKCwRt4CRB838bcV6TtBdw73HT30Ax4k56f8dVr+jO4ycs2Swxn+khV2BOp43wxFKPmlU+bISFWE69GEbhlJpMC8Q4Ww7MYwMm82VNgYotPvsoHC5DLHH3wPPFHx4C1GhUfH9Y3b+YOH/LfNAtcZ/dJrQURxY8Vo0mI8CwO+4AiM+ZpVFFS7GdDNGjeuDcRvsLWffKKmNHxIFHyi6DNdNp2DzBxQqVtzUidIBFNf9tT6Bl0w7RnKblAcfspKBJi9ocfsZaYI45O7w94wxt2Y2nhkLVxVWX0kiA8I9d0cV/hpGH4MHzoOoTQ3up8o3hno+p7BYZBEySsH2hc0MSB+4dRL8B9VB95hJlbluBL1ip2RNPnnGtpaJZNWq0P3/IEDMuzirDC7wfXFKaVamU5MsvvNiiD9YoDY+5D24Zv0ANLiPjlKQXsZF61mbhV9Jlz8mR2HVhpFh8X+4fW/xRQe2966gq0tZ7hANlINeE4mBIDq1TB6NUwfvi8aoLIDLTRR0BeLQoBvdVJ++huU6ALyuv4KXIHv+xALeKEjOK8i7a2bWuznoqCbgnEANy/OukLh1PBmwXQXDjdEKpSQBvwp8Yw1gi5V7rq5cukUqqPeR6v5/5hennQnVJ3zHEJ9dRwTubS14pv4+j94TxeY5eYNqMFTMxfTmzFh53jSIblBm8OIxbzyzNT2dHXc3g+dJJjuGMTuaLIuVt/9wSzGz6JOeYsvIdI31BifTpTHMg16ZTlTAiuM/kOKVnVLLqQg+47wLYRnzBTVvnyCfxsFvA25TH1dIR4RV/5PyK6Rld7BeWoCyV3t48RBcpyjY25YdFksU8UVw2/tfJxM9KJmF6XmPffbnYr5iJognuqhl7HJW3KoqWn3C/HDQ/jBFa1S8unCsAE/BwQM8PP9mlQqi561SVhe6Kt6Ek0QoclC53n1CoRsswpG1qWScgDanPP+GygAPi8/rSkTCxiomeEar5qcC4B7TzCwwj7nVCgVfa8Wh7ps1AWKxl57FSpCSdJRHZB3J0hQjPb/qfyWWmKqqCJDKlJ4UixVNmzw3ouoyWt0kjbEkpViWQk1VlMXDKE09Iv+kPmvvABwwGYlTnxzCNTeB+pJUHy1l+0Oh57egz+ykpsF66JvdSSY0G4INc/uhONThwjUDXUiQX2Mj1AkX2BqMC7fuQNAaW/LPeFLvj7dx/S7Uz897o2JcNm0DuLj4Xsnx8hSEdZqgrbuyhcLOrEfONl8G6DI5bjcVVrWiehlMftJYkKgowkfwDBOc32SrZAZSl02gpQDPt+RVBYZGFSdoVJUzWaQVoi628CjJSjM89TLSWIctTUTxrTNXugFP+dc6CSSXtqHdvslbvCvAW6ePk8rV/C5BWJs+eQhG9ocwbaOXP4UWMRZmfH9yB4HjyTxTkFGb1MSkgM8MTmEHCEruv3UUSo7N3QGCxA9UEfCRnsxEqixo056+QiH4b3RUAZcbisX5F68wSYoej021SRlENz6Y/dhqMexUNe4DgbRIkdCk3t6GlE7A5TCXT1oX/Zt+fIaELQVs5B4oah/Ur5ANOQ8aIW6qrf6c4BQzdCN84W0asKRZpPXaS5rWSY+am3lpuBFh9nRaKtr21CwQ+3A4ohOAAdNJw953yyLdq1rzdBFfpWsOBBiOkcBnnoGWjVGQBatSgCtAfC0MfJVziODst0eLzkM6V01JSsySvvS3usewn6bbdePO35yE0V1UKlFq4YrzIAF6aB6NrT6EoaujxJnImB6lmtXNGggV/LQaCOtlitLvaanQMDoaoIv+br6xIdcl5N/8+OsWVMmEUJC8yQTdS6zn4DcQuu+CeSeFqtOaflv/tnWu6cY42rZsthwMuGVn85I/vDKGA4ZzpdruVde1w4rBkNL91DHZJfJ/sxxfCP+KXWkzyAVYBzMJCmwVekNAg4jyn9Gtw/3z9zevy0tXDRt1hxbNkwJHcTTwwKxl41ZevYt4bEO1RRA0/E6W3EwwrF9uJRHwG/36Ut3//0LddQtJP1galtWFGkBE+koW7a2ZLs2RQtwZLmEGvgGzlDsq6+JK0y68P2+RhP0CgHagPB9NUyWQAA51KkvdKOWtea3GCVI2xuYHYvZkzSb7uDxQkAAAAA=)

## Pipeline flow

The following table lists the plugins used to run the video transforming
                    pipeline:| Plugin | Description |
| --- | --- |
| qtiqmmfsrc and filesrc | Captures the video data. |
| capsfilter | Enforces constraints on the raw video data. |
| qtivtransform | Transforms the video data. <br>After transformation, capsfilter is<br>                                    applied again. |
| tee | Splits the transformed video data in two output paths:<ul class="ul" id="gst-transform-example__ul_h31_kbv_4bc"><br>                                    <li class="li">Live preview</li><br><br>                                    <li class="li">Save to file</li><br><br>                                </ul> |
| Waylandsink | Displays the video in live preview. |
| h264parse | Parses the encoded H.264 video stream. |
| mp4mux | Multiplexes the stream into an MP4 container. |
| filesink | Writes the video data to a file. |

## Related information

Transform and Transcode use cases

**Parent Topic:** Run sample applications for video and audio

Last Published: Mar 27, 2026

Previous Topic
 
Audio recording Next Topic

Video composition