$lang['tuto'] = "سبق"; ?> فلٹر ونڈوز ایپس کے ساتھ ویڈیو پلے

فلٹر ونڈوز ایپس کے ساتھ ویڈیو پلے بیک کے مسائل کو ٹھیک کرنا: ویڈیو پلیئر کی غیر لاگو غلطی

Temp mail SuperHeros
فلٹر ونڈوز ایپس کے ساتھ ویڈیو پلے بیک کے مسائل کو ٹھیک کرنا: ویڈیو پلیئر کی غیر لاگو غلطی
فلٹر ونڈوز ایپس کے ساتھ ویڈیو پلے بیک کے مسائل کو ٹھیک کرنا: ویڈیو پلیئر کی غیر لاگو غلطی

فلٹر ڈیسک ٹاپ ایپلی کیشنز میں ویڈیو پلے بیک کی خرابیوں کو ہینڈل کرنا

Flutter ڈیسک ٹاپ ایپلیکیشن بناتے وقت، ڈویلپرز کو میڈیا جیسے ویڈیوز چلانے کی کوشش کرتے ہوئے غلطیوں کا سامنا کرنا پڑ سکتا ہے۔ ونڈوز ڈیسک ٹاپ ایپلی کیشنز پر ویڈیو پلے بیک کے دوران درپیش ایک عام مسئلہ ہے۔ غیر لاگو شدہ خرابی۔. یہ خرابی عام طور پر اس وقت پیدا ہوتی ہے جب ایپلیکیشن ویڈیو پلیئر کو شروع کرنے میں ناکام ہو جاتی ہے۔ اگر آپ اس کے ساتھ کام کر رہے ہیں۔ ویڈیو_پلیئر پیکیج، یہ آپ کی ایپ میں ویڈیوز کو آسانی سے چلنے سے روک سکتا ہے۔

غلطی کا پیغام "ویڈیو شروع کرنے میں خرابی: ناقابل عمل غلطی” مایوس کن ہو سکتا ہے، خاص طور پر جب آپ کسی ویڈیو کے ساتھ اسکرین سیور جیسی آسان چیز کو نافذ کرنے کی کوشش کر رہے ہوں۔ یہ مسئلہ فلٹر کے ڈیسک ٹاپ سپورٹ کے لیے مخصوص ہے، جو اب بھی تیار ہو رہا ہے، اور موبائل پلیٹ فارمز پر دستیاب کچھ خصوصیات ڈیسک ٹاپ ماحول کے لیے مکمل طور پر نافذ نہیں کی گئی ہیں۔

اس مضمون میں، ہم آپ کو اس مسئلے کو حل کرنے اور فلٹر ونڈوز ڈیسک ٹاپ ایپلی کیشنز پر مناسب ویڈیو پلے بیک کو یقینی بنانے کے لیے درکار اقدامات کے بارے میں بتائیں گے۔ ہم دریافت کریں گے کہ یہ مسئلہ کیوں پیش آیا اور اس پر قابو پانے کے لیے عملی حل فراہم کریں گے۔

اس گائیڈ کے اختتام تک، آپ سمجھ جائیں گے کہ کس طرح حل کیا جائے۔ غیر لاگو شدہ خرابی۔ اور کامیابی کے ساتھ اپنے فلٹر ڈیسک ٹاپ ایپلیکیشن پر ویڈیوز ڈسپلے کریں، چاہے وہ اسکرین سیور کے لیے ہو یا میڈیا کے دیگر مقاصد کے لیے۔

حکم استعمال کی مثال
VideoPlayerController.file یہ کمانڈ ڈیوائس کے فائل سسٹم سے مقامی ویڈیو فائل کا استعمال کرتے ہوئے ویڈیو پلیئر کو شروع کرتی ہے۔ یہ فلٹر میں ویڈیو پلے بیک کے لیے مخصوص ہے جب نیٹ ورک اسٹریمز کی بجائے فائلوں سے نمٹا جاتا ہے۔
ChewieController Chewie پیکیج کا استعمال کرتے ہوئے ویڈیو پلے بیک کو کنٹرول کرنے اور حسب ضرورت بنانے کے لیے استعمال کیا جاتا ہے، جو بنیادی فلٹر ویڈیو پلیئر میں اضافی کنٹرول اور خصوصیات شامل کرتا ہے۔ اس میں آٹو پلے، اسپیکٹ ریشو، اور لوپنگ جیسی خصوصیات شامل ہیں۔
_blackScreenTimer ایک ٹائمر آبجیکٹ جو مخصوص وقفوں پر کارروائیوں کو متحرک کرنے کے لیے استعمال ہوتا ہے۔ اس صورت میں، یہ ہر 15 منٹ میں بلیک اسکرین اثر کو متحرک کرنے کے لیے تیار ہے، جس سے ویڈیو پلے بیک کے دوران وقفہ پیدا ہوتا ہے۔
Future.delayed کوڈ کو دوبارہ شروع کرنے سے پہلے ایک مخصوص مدت کے لیے عمل کو روکتا ہے۔ یہ یہاں ویڈیو پلے بیک کو دوبارہ شروع کرنے سے پہلے ایک مخصوص وقت کے لیے بلیک اسکرین کی نقل کرنے کے لیے استعمال کیا جاتا ہے۔
setState اس فلٹر مخصوص طریقہ کو UI کو اپ ڈیٹ کرنے کے لیے کہا جاتا ہے جب ایپ کی حالت بدل جاتی ہے، جیسے کہ بلیک اسکرین اور ویڈیو ڈسپلے کے درمیان ٹوگل کرتے وقت۔
VideoPlayerController.initialize یہ کمانڈ ویڈیو پلیئر کو شروع کرتی ہے اور اسے پلے بیک کے لیے تیار کرتی ہے۔ ویڈیو چلانے کی کوشش کرنے سے پہلے اسے کال کرنا ضروری ہے، اس بات کو یقینی بناتے ہوئے کہ میڈیا مناسب طریقے سے لوڈ ہے۔
AspectRatio ویڈیو کے اصل طول و عرض کی بنیاد پر ویڈیو پلیئر کا پہلو تناسب سیٹ کرنے کے لیے استعمال کیا جاتا ہے۔ یہ اس بات کو یقینی بناتا ہے کہ ویڈیو اسکرین پر متناسب طور پر ظاہر ہو۔
FloatingActionButton یہ ویجیٹ فلٹر UI میں تیرتا ہوا بٹن بنانے کے لیے استعمال ہوتا ہے۔ اس صورت میں، یہ ویڈیو پلے کو ٹوگل کرنے اور متحرک طور پر کارروائیوں کو روکنے کے لیے استعمال ہوتا ہے۔
Timer.periodic باقاعدہ وقفوں پر ایک مخصوص فنکشن کو انجام دیتا ہے۔ یہاں، یہ ہر 15 منٹ میں بلیک اسکرین اثر کو متحرک کرنے کے لیے ذمہ دار ہے جب کہ ویڈیو چل رہا ہے۔

فلٹر ڈیسک ٹاپ ایپلی کیشنز میں ویڈیو پلے بیک اور ٹائمر کنٹرول کو سمجھنا

اسکرپٹ کی پہلی مثال یہ ظاہر کرتی ہے کہ a میں ویڈیو پلے بیک کو کیسے نافذ کیا جائے۔ فلٹر ڈیسک ٹاپ ایپلی کیشن video_player پیکیج کا استعمال کرتے ہوئے یہ ایک VideoPlayerController کو شروع کرنے سے شروع ہوتا ہے جو مقامی فائل سسٹم سے ویڈیو لوڈ کرتا ہے۔ یہ کنٹرولر ویڈیو آپریشنز جیسے کہ پلے، توقف اور تلاش کے انتظام کے لیے ضروری ہے۔ دی _initializeVideoPlayer() فنکشن بہت اہم ہے، کیونکہ یہ یقینی بناتا ہے کہ کوئی پلے بیک ایکشن ہونے سے پہلے ویڈیو صحیح طریقے سے لوڈ ہو گئی ہے۔ اگر فائل کا راستہ درست ہے اور ویڈیو شروع ہو جاتی ہے تو کنٹرولر خود بخود ویڈیو چلانا شروع کر دیتا ہے۔ اگر فائل موجود نہیں ہے یا کوئی خرابی واقع ہوتی ہے، تو یہ ڈیبگنگ کے مقاصد کے لیے غلطی کے پیغامات پرنٹ کرتی ہے۔

حل کے ایک اہم حصے میں ہر 15 منٹ میں بلیک اسکرین متعارف کرانے کے لیے ٹائمر کا استعمال شامل ہے۔ یہ استعمال کرتے ہوئے کیا جاتا ہے۔ ٹائمر.وقتی طریقہ، جو مخصوص وقفوں پر بار بار چلنے والے کاموں کو شیڈول کرتا ہے۔ اس صورت میں، ٹائمر ہر 15 منٹ میں _showBlackScreen() فنکشن کو متحرک کرتا ہے، جو ویڈیو کو عارضی طور پر روکتا ہے اور 7 سیکنڈ کے لیے بلیک اسکرین دکھاتا ہے۔ یہ ایک وقفہ بناتا ہے، اسکرین سیور اثر کی نقل کرتا ہے۔ ٹائمر کلاس وقتی واقعات کو کنٹرول کرنے میں ایک اہم کردار ادا کرتی ہے، اس مثال میں اسے بار بار چلنے والے کاموں کو منظم کرنے کے لیے ایک کلیدی جزو بناتی ہے۔

یوزر انٹرفیس کو منظم کرنے کے لیے، سیٹ اسٹیٹ() جب بھی سیاہ اسکرین کو ظاہر کرنے یا ہٹانے کی ضرورت ہو تو استعمال کیا جاتا ہے۔ سیٹ اسٹیٹ طریقہ اس بات کو یقینی بناتا ہے کہ UI کو ریاست میں ہونے والی تبدیلیوں کی عکاسی کرنے کے لیے اپ ڈیٹ کیا گیا ہے، جیسے کہ ویڈیو کو روکنا یا بلیک اسکرین دکھانا۔ 7 سیکنڈ کی تاخیر گزر جانے کے بعد، ویڈیو دوبارہ پلے بیک شروع کر دیتی ہے، اور سیاہ اسکرین چھپ جاتی ہے۔ ویڈیو پلے بیک اور بلیک اسکرین کے درمیان یہ ہموار منتقلی صارف کے تجربے کو برقرار رکھنے کے لیے ضروری ہے، خاص طور پر جب ویڈیو پلیئر کو اسکرین سیور کی فعالیت کے لیے استعمال کیا جا رہا ہو۔

دوسرا حل، جو چیوی پیکج کا استعمال کرتا ہے، زیادہ مضبوط ویڈیو کنٹرول فراہم کرتا ہے۔ Chewie ویڈیو پلیئر کی صلاحیتوں کو بڑھاتے ہوئے، پلے/پاز، سیک، اور فل سکرین موڈ جیسے حسب ضرورت کنٹرولز کا اضافہ کرتا ہے۔ دی چیوی کنٹرولر VideoPlayerController کے گرد لپیٹتا ہے، جس سے ڈویلپرز کو پلے بیک پر زیادہ کنٹرول ملتا ہے۔ یہ نقطہ نظر خاص طور پر ان لوگوں کے لیے مفید ہے جو صارفین کو بلٹ ان کنٹرولز، لوپنگ اور آٹو پلے فیچرز کے ساتھ ایک بھرپور تجربہ پیش کرنا چاہتے ہیں۔ دونوں اسکرپٹ فلٹر ونڈوز ایپلی کیشنز میں ویڈیو پلے بیک سے نمٹنے کے لیے عملی حل فراہم کرتی ہیں، ہر ایک مختلف استعمال کے معاملات کے لیے تیار کی گئی ہے۔

فلٹر ونڈوز ایپلی کیشنز میں ویڈیو پلے بیک کے مسائل کو کیسے ٹھیک کریں۔

حل 1: کا استعمال کرتے ہوئے ویڈیو_پلیئر فلٹر ڈیسک ٹاپ ایپلی کیشن میں خرابی سے نمٹنے کے ساتھ پیکیج۔

import 'dart:async';
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:video_player/video_player.dart';
void main() {
  runApp(MyApp());
}
class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: VideoPlayerFromFile(),
    );
  }
}
class VideoPlayerFromFile extends StatefulWidget {
  @override
  _VideoPlayerFromFileState createState() => _VideoPlayerFromFileState();
}
class _VideoPlayerFromFileState extends State<VideoPlayerFromFile> {
  VideoPlayerController? _controller;
  bool _isBlackScreen = false;
  Timer? _blackScreenTimer;
  @override
  void initState() {
    super.initState();
    _initializeVideoPlayer();
    _startBlackScreenTimer();
  }
  Future<void> _initializeVideoPlayer() async {
    String filePath = r'C:\videodata\video.mp4';
    if (await File(filePath).exists()) {
      _controller = VideoPlayerController.file(File(filePath));
      await _controller!.initialize().then((_) {
        setState(() { _controller!.play(); });
      }).catchError((error) {
        print("Error initializing video: $error");
      });
    } else {
      print('File does not exist at path: $filePath');
    }
  }
  void _startBlackScreenTimer() {
    _blackScreenTimer = Timer.periodic(Duration(minutes:15), (timer) {
      _showBlackScreen();
    });
  }
  void _showBlackScreen() {
    setState(() { _isBlackScreen = true; });
    _controller?.pause();
    Future.delayed(Duration(seconds:7), () {
      setState(() { _isBlackScreen = false; _controller?.play(); });
    });
  }
  @override
  void dispose() {
    _controller?.dispose();
    _blackScreenTimer?.cancel();
    super.dispose();
  }
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('Play Video with Black Screen Interval'));
      body: Center(
        child: _isBlackScreen
          ? Container(color: Colors.black)
          : _controller != null && _controller!.value.isInitialized
              ? AspectRatio(aspectRatio: _controller!.value.aspectRatio,
                 child: VideoPlayer(_controller!),)
              : Text('Loading video...'),
      ),
    );
  }
}

متبادل حل: کا استعمال کرتے ہوئے چیوی بہتر ویڈیو کنٹرول کے لیے پیکج

حل 2: Chewie اضافی خصوصیات اور کنٹرولز کے ساتھ ویڈیوز چلانے کے لیے ایک زیادہ لچکدار حل پیش کرتا ہے۔

import 'dart:async';
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:chewie/chewie.dart';
import 'package:video_player/video_player.dart';
void main() { runApp(MyApp()); }
class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: ChewieVideoPlayer(),
    );
  }
}
class ChewieVideoPlayer extends StatefulWidget {
  @override
  _ChewieVideoPlayerState createState() => _ChewieVideoPlayerState();
}
class _ChewieVideoPlayerState extends State<ChewieVideoPlayer> {
  VideoPlayerController? _videoPlayerController;
  ChewieController? _chewieController;
  @override
  void initState() {
    super.initState();
    _initializeChewiePlayer();
  }
  Future<void> _initializeChewiePlayer() async {
    String filePath = r'C:\videodata\video.mp4';
    if (await File(filePath).exists()) {
      _videoPlayerController = VideoPlayerController.file(File(filePath));
      await _videoPlayerController!.initialize();
      _chewieController = ChewieController(
        videoPlayerController: _videoPlayerController!,
        aspectRatio: _videoPlayerController!.value.aspectRatio,
        autoPlay: true,
        looping: true,
      );
      setState(() {});
    } else {
      print('File not found at path: $filePath');
    }
  }
  @override
  void dispose() {
    _videoPlayerController?.dispose();
    _chewieController?.dispose();
    super.dispose();
  }
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('Chewie Video Player'));
      body: Center(
        child: _chewieController != null
          ? Chewie(controller: _chewieController!)
          : Text('Loading video...'),
      ),
    );
  }
}

فلٹر ڈیسک ٹاپ میں ویڈیو پلے بیک اور بلیک اسکرین کنٹرول کو بہتر بنانا

ونڈوز کے لیے فلٹر میں ویڈیو پلے بیک کو نافذ کرتے وقت، ایک اہم عنصر جس کو اکثر نظر انداز کیا جاتا ہے وہ ویڈیو کی کارکردگی کو بہتر بنانا ہے، خاص طور پر جب ٹائمڈ بلیک اسکرینز جیسی خصوصیات شامل کرنا۔ یہ سمجھنا ضروری ہے کہ جب کہ ویڈیو_پلیئر پیکج سادہ ایپلیکیشنز کے لیے بہتر کام کرتا ہے، زیادہ جدید استعمال کے معاملات، جیسے وقتی رکاوٹوں کے ساتھ اسکرین سیور کے طور پر ویڈیو چلانا، کارکردگی کے مسائل کو متعارف کروا سکتا ہے۔ یہ وہ جگہ ہے جہاں وسائل کے موثر انتظام کو یقینی بنانا، جیسے ویڈیو پلیئر کو روکنا اور دوبارہ شروع کرنا، اہم ہو جاتا ہے۔ وسائل کے لیک ہونے سے بچنے کے لیے آپ کو کنٹرولرز کو صحیح طریقے سے ٹھکانے لگا کر میموری کے استعمال کو کم سے کم کرنے کی ضرورت ہے۔

Flutter ڈیسک ٹاپ ایپلی کیشنز میں ویڈیو کے ساتھ کام کرتے وقت غور کرنے کا ایک اور پہلو مختلف ویڈیو فارمیٹس کو ہینڈل کرنا ہے۔ دی ویڈیو_پلیئر پیکیج بنیادی طور پر MP4 فائلوں کو سپورٹ کرتا ہے، لیکن جب آپ کو دوسرے فارمیٹس چلانے کی ضرورت ہو تو کیا ہوتا ہے؟ جیسے پیکیج کا استعمال کرنا ffmpeg_kit_flutter ایک حل فراہم کر سکتا ہے، کیونکہ یہ متعدد ویڈیو فارمیٹس کو سپورٹ کرتا ہے اور لچک میں اضافہ کرتا ہے۔ یہ پیکیج ویڈیو کی تبدیلی اور ٹرانس کوڈنگ کی اجازت دیتا ہے، اس بات کو یقینی بناتا ہے کہ آپ ایک فارمیٹ تک محدود نہیں ہیں۔ مزید برآں، یہ ویڈیو فائلوں میں ہیرا پھیری کے لیے کمانڈز کی ایک وسیع رینج پیش کرتا ہے، جس سے ڈویلپرز کو ان کے میڈیا مواد پر زیادہ کنٹرول ملتا ہے۔

آخر میں، ویڈیو چلتے وقت صارف کے ان پٹ کو ہینڈل کرنا، جیسے ویڈیوز کو موقوف کرنا یا سوئچ کرنا، احتیاط سے ڈیزائن کرنے کی ضرورت ہے۔ انٹرایکٹو UI عناصر کا استعمال جیسے فلوٹنگ ایکشن بٹن صارفین کو آسانی سے پلے بیک کو کنٹرول کرنے میں مدد مل سکتی ہے۔ فلٹر کا صحیح استعمال کرنا سیٹ اسٹیٹ() طریقہ اس بات کو یقینی بناتا ہے کہ ایپ موجودہ ویڈیو کی حالت کو متحرک طور پر ظاہر کرتی ہے۔ خرابی سے نمٹنا بھی یہاں کلیدی حیثیت رکھتا ہے — ویڈیو شروع کرنے اور پلے بیک کے ارد گرد ٹرائی کیچ بلاکس کو لاگو کرنے سے کریشوں کو روکنے میں مدد ملتی ہے اور کچھ غلط ہونے پر صارفین کو بہتر فیڈ بیک ملتا ہے، جس سے صارف کے مجموعی تجربے میں اضافہ ہوتا ہے۔

فلٹر ونڈوز ایپلی کیشنز میں ویڈیو پلے بیک کے بارے میں عام سوالات

  1. Flutter Windows ایپلی کیشنز میں ویڈیوز چلاتے وقت "Unimplemented Error" کی وجہ کیا ہے؟
  2. یہ خرابی اس لیے ہوتی ہے کیونکہ video_player پیکیج نے ڈیسک ٹاپ سپورٹ کو مکمل طور پر نافذ نہیں کیا ہے۔ کچھ ویڈیو پلے بیک فیچرز اب بھی ڈیسک ٹاپ پلیٹ فارمز کے لیے تیار ہیں۔
  3. میں اس مسئلے کو کیسے ٹھیک کروں جہاں میری ویڈیو فائل نہیں ملی؟
  4. یقینی بنائیں کہ فائل کا راستہ درست ہے۔ ایک استعمال کریں۔ absolute path اور اس بات کو یقینی بنائیں کہ آپ بیک سلیش سے بچ جائیں۔ r آپ کی فائل پاتھ سٹرنگ میں۔
  5. کیا میں MP4 کے علاوہ دیگر ویڈیو فارمیٹس استعمال کر سکتا ہوں؟
  6. پہلے سے طے شدہ طور پر، video_player پیکیج MP4 کی حمایت کرتا ہے۔ دوسرے فارمیٹس کو کھیلنے کے لیے، استعمال کرنے پر غور کریں۔ ffmpeg_kit_flutter پیکیج، جو متعدد فارمیٹس کو سپورٹ کرتا ہے۔
  7. میں اپنے ویڈیو پلیئر میں پلے بیک کنٹرولز کیسے شامل کر سکتا ہوں؟
  8. آپ استعمال کر سکتے ہیں۔ Chewie پیکیج، جو فل سکرین موڈ، والیوم کنٹرول، اور تلاش جیسے جدید ویڈیو کنٹرولز کو شامل کرتا ہے۔
  9. ویڈیو لوڈ کرتے وقت میری فلٹر ایپ کیوں کریش ہو جاتی ہے؟
  10. یہ ویڈیو کی غلط شروعات کی وجہ سے ہو سکتا ہے۔ ہمیشہ استعمال کریں۔ try-catch غلطیوں کو احسن طریقے سے ہینڈل کرنے کے لیے آپ کے ویڈیو کے ابتدائی کوڈ کے ارد گرد بلاکس۔

اپنے پھڑپھڑانے والے ویڈیو پلے بیک کے سفر کو سمیٹنا

اس آرٹیکل میں، ہم نے دکھایا ہے کہ فلٹر ونڈوز ایپلیکیشن میں ویڈیوز چلانے کی کوشش کرتے وقت "غیر لاگو غلطی" کو کیسے حل کیا جائے۔ درست فائل پاتھ اور مضبوط ایرر ہینڈلنگ کے امتزاج کے ساتھ، آپ کریشوں کو روک سکتے ہیں اور ہموار ویڈیو پلے بیک کو یقینی بنا سکتے ہیں۔

وقتی بلیک اسکرین کی خصوصیت کو نافذ کرکے، آپ متحرک صارف کے تجربات بنا کر اپنی ایپ کو اگلی سطح پر لے جا سکتے ہیں۔ ان تکنیکوں کا استعمال کرتے ہوئے، آپ کی ایپلی کیشن ڈیسک ٹاپ پلیٹ فارمز پر ویڈیو پلے بیک کو مؤثر طریقے سے ہینڈل کرے گی، جس سے استعداد اور بھروسے کی پیش کش ہوگی۔

فلٹر ونڈوز ایپلی کیشنز میں ویڈیو پلے بیک کے ذرائع اور حوالہ جات
  1. ویڈیو پلے بیک کو سنبھالنے اور فلٹر ڈیسک ٹاپ ایپلی کیشنز میں غلطیوں کو حل کرنے کے بارے میں تفصیلات کا حوالہ سرکاری فلٹر دستاویزات سے لیا گیا تھا۔ فلٹر ڈیسک ٹاپ انٹیگریشن گائیڈ .
  2. ویڈیو_پلیئر کی فعالیت اور ٹائمر کنٹرول کو لاگو کرنے کے بارے میں رہنمائی پر موجود وسائل سے حاصل ہوئی ہے۔ video_player پیکیج کی دستاویزات .
  3. غیر لاگو شدہ خرابی اور دیگر خرابیوں کا سراغ لگانے کے نکات کو حل کرنے کے لیے، مضمون کمیونٹی کے مباحثوں میں مشترکہ بہترین طریقوں سے اخذ کیا گیا ہے اسٹیک اوور فلو .
  4. فلٹر میں فائل ہینڈلنگ اور ایرر رپورٹنگ کے ساتھ ویڈیو کی کارکردگی کو بہتر بنانے کے بارے میں معلومات جمع کی گئیں۔ پھڑپھڑاہٹ کی کارکردگی کی دستاویزات .